Удаление лишних пробелов

Задача: 

Удалить в строке все лишние пробелы.

Лишними считаются пробелы, следующие непосредственно за пробелами. Т.е. между словами всегда должен находиться один пробел.

Алгоритм решения задачи: 

Посимвольно перебирать строку, пока не будет достигнут конец строки. Если очередной символ является пробелом и после него также находится пробел, то скопировать строку до текущего символа и добавить к ней остаток строки, пропустив один символ.

Программа на языке Паскаль: 

var
    s: string;
    i: byte;
begin
    write('String: ');
    readln(s);
    i := 1;
    repeat
        if copy(s,i,2)='  ' then
            s := copy(s,1,i) + copy(s,i+2,length(s))
        else
            i := i + 1
    until (i > length(s));
    writeln('String: ', s);
readln
end.

Комментарии

помогите

программа которая удаляет символ д из строки символов с

Вот еще 1 вариант...

program probeli;
uses crt;
var
s:string;
i,dl,k:integer;
begin
writeln ('Введите строку');
readln (s);
k:=0; i:=1; dl:=length(s);
while i<dl do
begin
if s[i]<>' ' then i:=i+1;{если не пробел переходим к следующему символу}
if s[i]=' ' then i:=i+1; {если пробел то осталяем первый пробели переходим к следующему симолу}
while s[i]=' ' do {удаляем симол до тех пор пока он пробел}
delete (s,i,1);
if ((s[i]='.')or(s[i]=',')or(s[i]='?')or(s[i]='!')or(s[i]='-')or(s[i]=':'))and(s[i-1]=' ') then begin delete (s,i-1,1); end; {если этот символ знак пунктуации то удаляем пробел перед ним}
dl:=length(s);{присваиваем измененную длинну строки переменной}
end;
writeln (s);
end.

Help

Как ее приспособить для файла, а не для ввода с клавиатуры, т.е. читает свои входные данные из текстового файла и перезаписывает на правильный вариант. Помогите плиз кто в курсе.

Если в файле содержится не

Если в файле содержится не более 255 символов, то можно сделать так:

var
    s: string;
    i: byte;
    f: text;
begin
    assign(f,'c:/data.txt');
    reset(f); {открываем для чтения}
    readln(f,s); {читаем содержимое в строку}
 
{ изменяем строку }
    i:=1;
    repeat
        if copy(s,i,2) = '  ' then {в кавычках 2 пробела}
            s := copy(s,1,i) + copy(s,i+2,length(s))
        else
            i := i+1
    until (i > length(s));
 
    rewrite(f); {открываем файл для перезаписи}
    writeln(f,s); {записываем}
    close(f); {закрываем}
 
readln
end.

эта программа плохая!

она работает если в тексте не больше 2 пробелов а если их больше 2 тогда вот

var
s:string;
i,j,l:integer;
begin
writeln('Vvedite stroky:');
chet:=0;
readln(s);
for i:=1 to length(s) do begin
  j:=i;
  if s[i]=' ' then begin
    while s[j]=' ' do begin
      j:=j+1;
      if s[j]=' ' then
      delete(s,j,1);
    end;
  end;
end;
writeln(' Result: ',s);
end.

а это еще хуже!!! ЛУЧШЕ

а это еще хуже!!!
ЛУЧШЕ БЫ:

var
    s: string;
    i: byte;
begin
    write('String: ');
    readln(s);
    i := 1;
    repeat
        if (s[I]=' ') AND (S[I+1]=' ') then
            DELETE(S,I,1)
        else
            i := i + 1
    until (i > length(s));
    writeln('String: ', s);
readln
end.