Другие языки программирования и технологии

Строковые переменные (Паскаль).Подскажите пожалуйста

С восклицательным знаком вроде работает нормально с точками не знаю как сделать если точка в конце работает нормально если есть в середине ерунда получается ну в коде все видно подскажите плз {Дана строка символов. Преобразовать строку, заменив в ней : a)все восклицательные знаки точками; б)каждую точку тремя точками.} var n,i:integer; S1:string[3]; Str:string; begin Writeln('Введите текст'); Read(Str); n:=Length(Str); S1:='...'; for i := 1 to n do begin if (Str ='.') then begin Delete(Str,i,1);insert(S1,Str,i);end; if (Str ='!') then begin Str := '.';end; end; writeLn(str); end.
DB
Dastan.. Bek..
1 961
var i:integer; Str:string;
begin
Writeln('Введите текст'); Readln(Str); i:=0;
repeat
inc(i); if Str[ i]='.' then begin insert('..',Str,i); i:=i+2 end;
if Str[ i] ='!' then Str[ i]:='.';
until i=length(Str));
writeLn(str); readln
end.
РЧ
Роман Чупров
56 928
Лучший ответ
Чет мне не понятно как у тебя конструкция if (Str ='.') работает? ?
я понимаю if(Str = '.') т. е. сравнение символа (элемента массива) с символом ТОЧКА
а как ты строку с точкой сравниваешь я понять не могу!

Роман Малиновский прав! Учитывай смещение после вставки 3-х точек!
я так понимаю у тебя если точка в середине то он в этом месте дофига точек ставит?
вот сматри какая фигня получается, ты вставляешь раз 3 точки заместо одной, длинна строки увеличивается, а все символы которые находятся после точки сдвигаютя, т. е их индекс меняется.
допустим было
123.123
точка находится под индексом i = 4
потом проход цикла при i = 4 становится
123...123
затем, следующий проход, i = 5, он опять видит точку и тд
в этом причина
Михаил Канов
Михаил Канов
1 155
Dastan.. Bek.. Ну да в этом и загвостка нужно что то другое применять как я не крутил не получается есть идеи ?
Михаил Канов посоветую воспользоваться функцией pos, она даст возможность вести свой счетчик помимо цикла, т.е так же увеличивается вместе с i но при нахожденнии точки еще увеличивается на 2
писал в блокноте и не проверял так что могут быть ошибки

var n,i:integer;
S1:string[3];
Str:string;
begin
Writeln('Введите текст'); Read(Str);

{Для А}
for i := 1 to Length(Str) do
begin
if (Str ='!') then begin Str:= '.';
end;
writeLn(str);

{Для Б}
i:=0;
n:=length(str);
while i<>n do
begin
if(str='.') then
begin
delete(str,i,1);
insert(str,'...',i);
n:=n+2;
i:=i+1;
end;
end;
writeLn(str);
end.