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

UptoLike

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

43
Задача 10: Удалить из строки слова, в которых есть хоть одна буква
последнего слова.
Пример: из строки «программирование на языках высокого уровняэто
просто» получится «на языках – »
Рассуждения:
1. Очевидно, что эта задача, так же как и задача 8, связана с удалением
слов, только условие удаления другое. Вспомним код, который был в
задаче
8.
2. По условию надо удалить те слова, «в которых есть хоть одна буква
последнего слова строки». Однако тут уже есть скрытая проблемаа
кто сказал, что в строке есть слова?
3. Так же логично предположить, что для выполнения этого задания
нужно найти последнее слово. При этом находить его надо только 1
раз,
т. е. действие по нахождению последнего слова должно находиться вне
циклов. И ответом будет само последнее слово, т. е. объект типа string
(следует учитывать, что входная строка str доступна во всем классе).
Поэтому сигнатура функции нахождения последнего слова строки
будет следующая:
public string findLastWord() {
}
4. Очевидно, что при нахождении последнего слова разделители между
словами не важны, т. е. их можно терять. А поэтому можно
воспользоваться функцией Split. Так же логично предположить, что
если в предложении стоит 2 знака препинания подряд, то между ними
находится слово, равное пустой строке, которое занимает 0 символов.
Такие слова нам не нужны. К
счастью, в функции Split есть опция,
которая указывает на необходимость игнорирования пустых строк.
5. Следующим шагом в рассуждениях является то, что если в строке нет
слов (т. е. их количество равно 0) – то это исключительная ситуация.
Значит, в этом случае надо выкинуть исключение с помощью оператора
throw. А если есть, то индекс последнего
слова равен размеру массива
слов минус один (потому что индексация начинается с 0). С учетом этих
рассуждений код примет следующи вид:
public string findLastWord() {
string[] words = str.Split(new char[] {' ', '.', ',', '!'},
StringSplitOptions.RemoveEmptyEntries);
if (words.Length == 0) {
throw new ApplicationException("В строке нет слов");
}
return words[words.Length - 1];
}