У введеному тексті замінити всі пропуски, що йдуть підряд одним єдиним пропуском.

Розв’язання:

Дана задача є однією з великої кількості невеликих підзадач, які доводиться розв’язувати при написанні «нормальних» текстових редакторів і відноситься вона до задач з категорії форматування тексту. Уточнимо умову задачі, тобто накладемо обмеження, що наше речення повинно починатись і закінчуватись символом, відмінним від пропуску (Задачу, в якій речення може починатись з пропусків і закінчуватись пропусками ми рекомендуємо розв’язати вам самостійно після аналізу розв’язку цієї задачі). Зверніть увагу, що ми досить часто уточнюємо формулювання завдань. Робимо ми це для того, щоб привчити вас до уважного аналізу умови кожної задачі. Адже іноді саме на таких «дрібницях» ви можете отримати нижчу від очікуваної оцінку, і особливо це стосується задач, що пропонуються на різних олімпіадах.

Суть пропонованого вам алгоритму розв’язку полягає в тому що ми в нову літерну величину St1 будемо копіювати всі символи літерної величини St, які відмінні від пропуску. Пропуск скопіюємо лише тоді, коли розглядуваний символ припуск і наступний за ним – не пропуск. Якщо ви уважно розібрались з розглянутою вище задачею про підрахунок кількості слів у реченні, то мабуть помітили, що запропонований спосіб майже схожий на той, що ми використали при підрахунку кількості слів у реченні (з точністю «навпаки» ).

Після цього написання програми не становить труднощів:
program del_space; var St, St1 : string;     i : integer; begin   write(‘Введiть текст: ’);
readln(St);   St1 := ‘[’+St[1];   for i := 2 to length(St) do     if st[i] <> ‘ ’ then st1:=st1+st[i]     else if (st[i] = ‘ ’) and (st[i+1] <> ‘ ’) then            st1 := St1 + st[i]   St1 := St1 + ‘]’;   writeln(St1);   readln end.

Немає коментарів:

Дописати коментар