Автор Андрей задал вопрос в разделе Другие языки и технологии
Строковые переменные (Паскаль).Подскажите пожалуйста и получил лучший ответ
Ответ от Krab Вark[гуру]
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.
Ответ от Ѐоман Малиновский[гуру]
я так понимаю у тебя если точка в середине то он в этом месте дофига точек ставит?
вот сматри какая фигня получается, ты вставляешь раз 3 точки заместо одной, длинна строки увеличивается, а все символы которые находятся после точки сдвигаютя, т. е их индекс меняется.
допустим было
123.123
точка находится под индексом i = 4
потом проход цикла при i = 4 становится
123...123
затем, следующий проход, i = 5, он опять видит точку и тд
в этом причина
я так понимаю у тебя если точка в середине то он в этом месте дофига точек ставит?
вот сматри какая фигня получается, ты вставляешь раз 3 точки заместо одной, длинна строки увеличивается, а все символы которые находятся после точки сдвигаютя, т. е их индекс меняется.
допустим было
123.123
точка находится под индексом i = 4
потом проход цикла при i = 4 становится
123...123
затем, следующий проход, i = 5, он опять видит точку и тд
в этом причина
Ответ от ИГОРЬ[гуру]
Чет мне не понятно как у тебя конструкция if (Str ='.') работает? ?
я понимаю if(Str = '.') т. е. сравнение символа (элемента массива) с символом ТОЧКА
а как ты строку с точкой сравниваешь я понять не могу!
Роман Малиновский прав! Учитывай смещение после вставки 3-х точек!
Чет мне не понятно как у тебя конструкция if (Str ='.') работает? ?
я понимаю if(Str = '.') т. е. сравнение символа (элемента массива) с символом ТОЧКА
а как ты строку с точкой сравниваешь я понять не могу!
Роман Малиновский прав! Учитывай смещение после вставки 3-х точек!
Ответ от Александр Ерофеев[гуру]
писал в блокноте и не проверял так что могут быть ошибки
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.
писал в блокноте и не проверял так что могут быть ошибки
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.
Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Строковые переменные (Паскаль).Подскажите пожалуйста