§ 9. Строковые величины
9.6. Преобразование строк
Пример 9.14. По правилам орфографии новое предложение начинается всегда с заглавной буквы. Текстовые редакторы автоматизируют ввод заглавной буквы, т. е. если пользователь написал первое слово в предложении со строчной буквы, то она заменяется на заглавную. Написать программу, которая производит такую автозамену для текста, набранного латинским буквами. Считать, что текст набран корректно и после каждого знака препинания, означающего конец предложения («.», «!», «?»), стоит пробел. Этапы выполнения задания I. Исходные данные: переменная st (введенная строка). II. Результат: преобразованная строка. III. Алгоритм решения задачи. 1. Ввод исходных данных. 4.1. Если текущий символ является символом конца предложения, то нужно заменить символ, стоящий на две позиции дальше, если этот символ — строчная буква. 5.Вывод результата. IV. Описание переменных: st – string, n – int. Во всех текстовых редакторах реализована функция Заменить. При выполнении этой команды некоторые символы из строки удаляются, а вместо них вставляются другие символы. Пример 9.15. Написать программу, которая заменит в тексте каждую цифру 2 словом «two». Этапы выполнения задания I. Исходные данные: переменная st (введенный текст). II. Результат: преобразованный текст. III. Алгоритм решения задачи. 1. Ввод исходных данных. 2.1. Если текущий символ текста «2», то удаляем его и вставляем подстроку «two». 3. Вывод результата. IV. Описание переменных: st – string, i – int. При правильном наборе компьютерного текста между любыми двумя словами должен быть ровно один пробел. Однако иногда случайно вставляют несколько пробелов. В этом случае Word подчеркивает пробелы голубой волнистой линией (пример 9.16). Пример 9.17. Написать программу, которая проверяет правильность расстановки пробелов в тексте и, если между словами более одного пробела, — удаляет лишние. Этапы выполнения задания I. Исходные данные: переменная st (введенный текст). II. Результат: преобразованный текст. III. Алгоритм решения задачи. 1. Ввод исходных данных. 3.1. Если оба соседних символа являются пробелами, то удалим один из них. Соседние символы имеют индексы, отличающиеся на один: i и i + 1. 4. Вывод результата. VI. Описание переменных: st – string, i– int. Пример 9.18. Написать программу, которая проверяет правильность расстановки пробелов вокруг тире. Если пробелы пропущены, то вставляет их. Предполагается, что в тексте нет слов, которые пишутся через дефис, двух знаков «-» подряд и лишних пробелов. Этапы выполнения задания I. Исходные данные: переменная st (введенный текст). II. Результат: преобразованный текст. III. Алгоритм решения задачи. 1. Ввод исходных данных. 2.1. Если соседний справа символ (i + 1) не пробел, то вставляем пробел. 3. Переходим к следующему символу. IV. Описание переменных: st – string, i– int. Пример 9.19. Написать программу, которая выведет слова-палиндромы [3] (слова, которые одинаково читаются слева направо и справа налево), входящие в заданный текст. Слова в тексте могут быть разделены одним или несколькими пробелами. Пробелы могут быть в начале и в конце текста. Этапы выполнения задания I. Исходные данные: переменная st (введенный текст). II. Результат: слова-палиндромы. III. Алгоритм решения задачи. 1. Ввод исходных данных. 4.1. Удалим пробелы в начале строки. Выделим первое слово из строки. 5. Опишем три вспомогательных алгоритма. 5.1. Функцию DelSpace для удаления пробелов в начале строки. Пробелы удаляются из строки только тогда, когда она не пуста. Если пробелов в начале строки нет, то функция не изменит исходную строку. 6. Вывод сообщения «нет палиндромов» в случае, если значение p осталось false. IV. Описание переменных: st, sl – string, i, n – int, p - bool. |
Пример 9.14. V. Программа:
VI. Тестирование [2]. Пример 9.15. V. Программа:
VI. Тестирование. VII. Анализ результата. Вместо двух функций erase и insert можно воспользоваться функцией replace. st.replace(i, 1, "two"); Пример 9.16. Выделение лишних пробелов в Word. Пример 9.17. V. Программа:
VI. Тестирование. Рассмотрим подробнее ситуацию, когда в тексте стоят подряд два или более пробелов. В примере такая ситуация встречается между словами «правильном» и «наборе». Условие (st[i] == ' ' && st[i + 1] == ' ') для i = 14 выполнится, и пробел, стоящий на 14 месте, удалится. Тогда пробел, стоящий на месте 15, сдвинется влево и получит номер 14. При следующем выполнении тела цикла снова удалится пробел на месте 14, а пробел на месте 15 сдвинется влево. Переход на следующий символ осуществится только тогда, когда условие (st[i] == ' ' && st[i + 1] == ' ') будет ложным — между словами останется только один пробел. Пример 9.18. V. Программа:
VI. Тестирование. Введите текст: «Жизнь прожить-не поле перейти. Родимая сторона- мать, чужая -мачеха. Сделал дело — гуляй смело.» Результат: VII. Анализ результата. В примере встречаются все четыре возможных ситуации: пробелов нет ни слева, ни справа от тире; пробел только слева; пробел только справа; пробелы с двух сторон. В результате выполнения все пробелы расставлены правильно. Пример 9.19. V. Программа:
VI. Тестирование. Введите текст: «На берегу стоит шалаш из камыша. Для трафаретной печати предназначен ротатор, или мимеограф. Пшеничная лепёшка наан является блюдом индийской национальной кухни». Результат: |