Алгоритмическое мышление при решении задач (на примере языка C#). Шамшев А.Б - 37 стр.

UptoLike

Составители: 

37
Для каждого символа строки
НачалоЦикла
Если текущийСимволначало слова, то
НачалоЕсли
Объявить длину слова
Найти длину слова, которое начинается в текущем символе
Объявить переменную, в которой будет храниться текущее слово
Получить слово в виде строки.
Если слово необходимо удалить, то
НачалоЕсли
Удалить слово
Уменьшить текущую позицию в строке
ОкончаниеЕсли
ОкончаниеЕсли
ОкончаниеЦикла
6.15. Этот псевдокодовый алгоритм является верным, но как мы увидим
позже, нерациональным. Однако его уже можно реализовать в виде
кодов.
public static void processString(ref string str) {
for (int i = 0; i < str.Length; i++) {
if (isBeginOfWord(str, i)) {
int len = getWordLength(str, i);
string word = str.Substring(i, len);
if (needDelWord(word)) {
str = str.Remove(i, len);
i--;
}
}
}
}
6.16. Теперь чуть изменим коды, используя оператор Continue и уменьшив
вложенность кода
public static void processString(ref string str) {
for (int i = 0; i < str.Length; i++) {
if (isBeginOfWord(str, i) == false) {
continue;
}
int len = getWordLength(str, i);
string word = str.Substring(i, len);
if (needDelWord(word)) {
str = str.Remove(i, len);
}
}
}
6.17. Для дальнейшей оптимизации необходимо учесть, что после слова
находится или разделитель (который при поиске следующего слова
можно не просматривать) или конец строки. Поэтому уменьшение
индексации на 1 при удалении не нужно.