слова. Но функция обнаруживает лишь первое вхождение фрагмента, а как быть с остальными? Я предлагаю постепенно разрушать исходную строку. То есть, найдя искомый фрагмент, будем удалять его из строки и снова повторять поиск. На этом и построена программа «P_44_2».
{ P_44_2 - Подсчет слов «PASCAL» в строке }
var S : string; { исходная строка }
p : integer; { позиция в строке }
c : integer; { счетчик слов }
begin
S:='Лучший язык программирования – это PASCAL!'+
'Изучите PASCAL! PASCAL не подведет!';
c:=0;
repeat
p:= Pos('PASCAL', S); { ищем слово «PASCAL» }
if p>0 then begin { если нашли }
Inc(c); { то наращиваем счетчик }
{ и удаляем это слово из строки }
Delete(S, p, Length('PASCAL'));
end
until p=0; { выход, если слов «PASCAL» больше нет }
Writeln('Найдено слов PASCAL: ',c); Readln;
end.
Любой текстовый редактор умеет заменять одну подстроку на другую, – это называется контекстной заменой. Устроим такую замену в строковой переменной. Итак, дана строка, содержащая несколько слов «Pascal». Заменим все вхождения слова «Pascal» словом «Паскаль» (чем не англо-русский переводчик?).
Разобравшись с предыдущей задачей, вы легко одолеете и эту. Для проверки вашего решения сравните его с моим («P_44_3»).
{ P_44_3 - Замена слов «Pascal» на «Паскаль» }
var S : string; { исходная строка }
p : integer; { позиция в строке }
begin
S:='Лучший язык программирования – Pascal! '+
'Изучите Pascal! Pascal не подведет!';
Writeln(S); { исходная строка }
repeat
p:= Pos('Pascal', S); { ищем слово 'Pascal' }
if p>0 then begin { если нашли }
{ удаляем это слово из строки }
Delete(S, p, Length('Pascal'));
{ и вставляем в этом месте слово 'Паскаль'}
Insert('Паскаль', S, p);
end
until p=0; { выход, если слов 'Pascal' больше нет }
Writeln(S); { строка результата }
Readln;
end.