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

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

Форум «Всё о Паскале» _ Задачи _ задача с заменой символов

Автор: Витёк 29.11.2006 16:14

Нам задали сделать задачку. Вот условие: А) заменить все (!) знаки на (.)
Б) затем все точки заменить на (...).
Первую часть я сделал так:

 var s:string;
i:integer;
begin
readln(s);
for i:=1 to length(s) do
if s[i] ='!' then s[i]:='.';
writeln(s);
end.

Ну а вот с заменой точки в этой же программе выходит ошибка. Я хотел сделать это также как и с (!), но не получилось. Объясните пожалйста что я не так сделал.

Автор: klem4 29.11.2006 16:44

Вот так например:

i := 1;

while (i <= Length(s)) do
if s[i] = '.' then begin
Insert('..', s, i + 1);
inc(i, 3);
end else inc(i);

Автор: volvo 29.11.2006 16:57

Цитата
Объясните пожалйста что я не так сделал
Если бы ты показал, КАК ты сделал вторую часть, мы бы подсказали, где твоя ошибка... А так - телепатически - ты в начале цикла нашел длину строки, и проходишь по ней... Но при добавлении символов в строку ее длина изменяется, а твоя программа об этом не знает, так что For здесь не пойдет явно...

Не забывай, конечное значение переменной для For-а не вычисляется на каждой итерации, оно вычисляется ПЕРЕД началом цикла, и сохраняется...