Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ обработка символьной информации

Автор: футбик 11.10.2008 20:49

Всем привет. Помогите пожалуйста !help.gif, необходимо все сочетания АВС заменить на ОДЕ, слова разделены пробелами, предложения заканчиваются точкой. Текст вводится с клавиатуры, по желанию можно определить фиксированную длину
Заранее благодарен smile.gif

Автор: maksimla 11.10.2008 21:59

пример напиши

Автор: volvo 11.10.2008 22:14

Можно без примера, но с уточнением: менять все слова АВС на ОДЕ, или именно "сочетания"? Если второе - то зачем информация, что

Цитата
слова разделены пробелами, предложения заканчиваются точкой.
?

P.S. Кстати, это (замена одних слов на другие) выкладывалось на форуме, поищи... Замена сочетаний вообще делается элементарно, Pos + Delete + Insert в помощь...

Автор: футбик 12.10.2008 21:28

заменить нужно сочетания, а с этой штукой: Pos + Delete + Insert , будем разбираться
Спасибо

Автор: футбик 15.10.2008 17:59

в общем есть бок, меняет только 1-ю 'ABC', подскажите пожалуйста.

var
str,st,s : string;
i,z:integer;
begin
read(str);
s:='ABC';
st:='ОДЕ';
z:=pos(s,str);
for i:=1 to length(str) do
begin
delete(str,z,length(s));
insert(st,str,z);
end;
writeln(str);
end.

Автор: volvo 15.10.2008 19:32

Цитата
есть бок, меняет только 1-ю 'ABC'
Причем прогоняет цикл впустую length(s)-1 раз... Обрати внимание: у тебя внутри цикла For ни одно выражение от i не зависит... Странно, не правда? Если ничего не меняется, так зачем гонять цикл несколько раз?

На самом деле все проще:

...
repeat
z := pos(s, str);
if z <> 0 then begin
{ вот тут и меняешь одно на другое }
end;
until z = 0; { <--- больше 'ABC' нет, выходим }
...
Цикл For здесь не нужен вообще...

Автор: футбик 15.10.2008 20:42

volvo спасибо smile.gif