Разработка алгоритма выборки слов
Для создания алгоритма выборки слов следует, прежде всего, определить, что такое слово. Возможны три определения:
1. Последовательность символов, не являющихся пробелами окруженная пробелами слева и справа. Например, в фразе "This is string" " "is" считаются словами согласно этому определению, так как он окружен символами пробела слева и справа.
2. Последовательность символов, не являющихся пробелами окруженная:
• началом текста слева
• символом пробела справа
В нашей фразе словом считается "This".
3. Последовательность непустых символов, окруженная:
• символом пробела слева
• концом текста справа
В нашей фразе словом считается "string".
Эти определения включают все возможные подстроки текста, которые считаются словами. Имея определение слова, можно перейти к разработке алгоритма.
Основная стратегия алгоритма заключается в применении двух переменных в качестве маркеров текста: wordBegin и wordEnd.Каждая переменная содержит индекс отдельного символа строки. Для иллюстрации возможностей маркеров рассмотрим следующую строку:
string myText = "This is string";
Разумеется, строку myTextможно рассматривать как индексированный набор символов:
T | H | I | S | I | S | S | T | R | I | N | G |
Присваивая маркерам wordBegin и wordEndдопустимые значения, можно:
• обращаться к отдельным символам (посредством квадратных скобок []) строки:
char ch;
wordEnd = 8;
ch = myText[wordEnd];
(здесь переменной chприсваивается символ s);
• обращаться к подстрокам, заключенным между двумя маркерами, используя метод Substringкласса string.wordBeginуказывает на начало подстроки, а wordEnd,очевидно, — на ее конец.
Например, фрагмент кода
int wordLength;
wordBegin = 5;
wordEnd = 7;
wordLength = wordEnd - wordBegin;
Console.WriteLine(myText.SubString(wordBegin, wordLength);
выводит на консоль текст "is".
Если wordBeginвсегда указывает на начало слова, переменную wordEndможно перемещать посимвольно в поиске конца слова. Это иллюстрируется. В соответствии с предыдущими определениями слова wordEndнаходит конец слова, если:|
· wordEndуказывает на символ пробела
· wordEndдостигает конца текста
Найденное слово можно извлечь с помощью метода Substring,так как на этот момент четко известно, что wordBegin и wordEndобозначают границы слова.
Последний шаг этого цикла алгоритма — переместить маркер wordBeginна первый символ следующего слова. Для этого ему присваивается значение wordEndплюс один. Смысл очевиден: когда wordEndопределяет конец слова, эта переменная указывает на пробел перед следующим словом. Последнее справедливо до тех пор, пока не достигнут конец текста. В этом случае алгоритм прекращает работу; не пытаясь переместить маркер wordBegin.