Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
36
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

Удаление из строки слов заданной длины

Задача:

Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.

Алгоритм решения задачи:

  1. Просматривать строку посимвольно (i), пока не будет достигнут ее конец (len).

  2. Длина очередного слова хранится в переменной (j). Если очередной символ является пробелом, то переменная сравнивается с числом 5.

  3. Если длина слова оказывается меньше пяти символов, то с помощью процедуры delete() оно удаляется.

  4. Переменная, обозначающая длину слова, должна обнуляться, когда очередной символ пробел.

  5. После удаления подстроки должна снова измеряться длина строки (len).

Программа на языке Паскаль:

var

s: string;

len, i, j: integer;

begin

write('Input string: ');

readln(s);

len:= length(s);

i:= 1; {начинаем с первого символа в строке}

j:= 0; {сначала длина слова равна нулю}

while i<=len do begin

if s[i] <> ' ' then begin {если очередной символ не пробел}

j:= j+1; {увеличиваем длину слова}

i:= i+1; {переходим к следующей букве}

end

else begin {если очередной символ пробел}

if j < 5 then begin {если длина слова < 5}

delete(s,i-j,j+1); {вырезаем вместе с пробелом после слова}

len:= length(s);

i:= i-j; {i в начало на длину вырезанной подстроки}

j:= 0; {обнуляем длину слова}

end

else begin {если длина слова > 5}

i:= i+1; {переходим к следующей букве}

j:= 0; {обнуляем длину слова}

end;

end;

end;

if j < 5 then {если последнее слово < 5 букв}

delete(s,i-j,j);

writeln(s);

readln

end.

Удаление последнего слова в строке

Задача:

Требуется в произвольной строке удалить последнее слово, т.е. все символы после последнего пробела в строке.

Описание переменных:

s – строка;

len – ее длина.

Алгоритм решения задачи:

  1. Посимвольно просматриваем строку, начиная с конца.

  2. Как только встретится пробел, удаляем все символы от текущей позиции до конца строки и прерываем выполнение цикла.

Программа на языке Паскаль:

var

s: string;

len,i: byte;

begin

write('String: ');

readln(s);

len := length(s);

for i:=len downto 1 do

if s[i]=' ' then begin

delete(s,i,len-i+1);

break;

end;

writeln(s);

readln

end.

Примечания:

Если не использовать инструкцию break, то цикл продолжит выполняться и постепенно удалит все слова из строки за исключением первого.

Выражение len-i+1 дает в результате длину удаляемой части. Например, если длина строки равна 10, просматривается 7-й символ, и он оказывается пробелом, то приведенное выше выражение вернет 4. Будет удалена подстрока из 4-х символов, начиная с 7-го.

Добавление пробелов в строку

Задача:

Добавить в строку пробелы после знаков препинания, если они там отсутствуют.

Алгоритм решения задачи:

  1. Извлечь очередной символ из строки.

  2. Если он является знаком препинания, а после него нет пробела, то скопировать часть строки до этого символа включительно, добавить пробел и скопировать оставшуюся часть строки.

Программа на языке Паскаль:

var

s: string;

c: char;

i: byte;

begin

write('String: ');

readln(s);

i := 1;

repeat

c := s[i];

if ((c='.')or(c=',')or(c='!')or(c='?')) and (s[i+1]<>' ') then

s := copy(s,1,i) + ' ' + copy(s,i+1,length(s)-i);

i := i + 1;

until (i >= length(s));

writeln('String: ',s);

readln

end.