Помощь - Поиск - Пользователи - Календарь
Полная версия: Не могу найти ошибку!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
--==KliM==--
4. Составьте программу удаления "лишних" пробелов (спаренных, начальных и концевых пробелов строки) в полученной строке.

Код

var x:string;
    i:byte;
begin
writeln('vvedi stroku=');
readln(x);
while length(x)>0 and x[1]=' ' do delete(x,1,1);
while x[length(x)]=' ' do delete (x,length(x),1);
i:=1;
while length(x)>0 do begin
i:=pos('  ',x);
if i=0 then break
end;
writeln(x);
end.


ПОМОГИТЕ ПЛИЗЗ! ЗАВТРА ЭКЗАМЕН!! ypriamii.gif
RaV
Цитата
while length(x)>0 and x[1]=' ' do delete(x,1,1);
while x[length(x)]=' ' do delete (x,length(x),1);


Вот этот фрагмент можно сделать в одном цикле:

while (x[1]=' ')or(x[length(x)]=' ') do
begin
if x[1]=' ' then delete(x,1,1);
if x[length(x)]=' 'then delete(x,length(x),1);
end;


А вот это замени совсем
Цитата
while length(x)>0 do begin
i:=pos(' ',x); {в этом цикле твоя ошибка,не правильно построен}
if i=0 then break
end;


на :

for i:=1 to length(x)do if (x[i]=' ')and(x[i+1]=' ') then {перебираем символы в строке}
begin
delete(x,i,1); {Если больше одного пробела(x[i]=' ' и x[i+1]=' ', то удаляем лишний пробел}
i:=i-1; {Возвращаемся на 1 символ назад,т.к. пробелов может быть больше 2х между словами}
end;
--==KliM==--
ФУХ! СПАСИБО ОГРОМНОЕ! good.gif good.gif good.gif
RaV
Да не зачто! no1.gif
volvo
RaV - последнее предупреждение... Еще раз увижу программу, в которой делается вот ЭТО:
for i:=1 to length(x)do
if (x[i]=' ')and(x[i+1]=' ') then begin
delete(x,i,1);
i:=i-1; { <-- Махинации с управляющей переменной цикла !!! }
end;
- это закончится для тебя В ЛУЧШЕМ СЛУЧАЕ - премодом. Все ясно?
RaV
Понятно
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.