1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
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.
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;