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.
ПОМОГИТЕ ПЛИЗЗ! ЗАВТРА ЭКЗАМЕН!!
RaV
30.05.2006 13:51
Цитата
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)]=' ') dobeginif 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:=1to length(x)doif (x[i]=' ')and(x[i+1]=' ') then{перебираем символы в строке}begin
delete(x,i,1); {Если больше одного пробела(x[i]=' ' и x[i+1]=' ', то удаляем лишний пробел}
i:=i-1; {Возвращаемся на 1 символ назад,т.к. пробелов может быть больше 2х между словами}end;
--==KliM==--
30.05.2006 14:26
ФУХ! СПАСИБО ОГРОМНОЕ!
RaV
30.05.2006 14:37
Да не зачто!
volvo
30.05.2006 16:12
RaV - последнее предупреждение... Еще раз увижу программу, в которой делается вот ЭТО:
for i:=1to length(x)doif (x[i]=' ')and(x[i+1]=' ') thenbegin
delete(x,i,1);
i:=i-1; { <-- Махинации с управляющей переменной цикла !!! }end;
- это закончится для тебя В ЛУЧШЕМ СЛУЧАЕ - премодом. Все ясно?
RaV
30.05.2006 16:26
Понятно
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.