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

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

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

Для удаления пробелов в конце используется примерно тот же алгоритм, что и для удаления в начале. Однако надо уменьшать на 1 индекс последнего элемента, если пробел был удален, или постоянно измерять длину строки (значение длины либо совпадает с последним индексом, либо меньше на 1).

Для удаления лишних пробелов внутри строки, надо, посимвольно перебирая строку, проверять, если очередной символ пробел, то не пробел ли следующий за ним. Если это так, то надо взять строку от начала до текущего (пробельного) символа включительно и присоединить к этой части часть строки, начинающуюся после второго пробела и до конца. При этом не надо увеличивать индекс элементов (т.к. может оказаться, что после удаленного пробела есть еще пробелы). Если же очередной символ не пробел или пробел, но после него идет не пробел, то надо перейти к следующему символу строки.

var
    str: string;
    i: byte;
begin
    readln(str);
    i := 1;
    while str[i] = ' ' do
        delete(str,i,1);
    while str[length(str)] = ' ' do
        delete(str, length(str), 1);
    i := 2;
    while i < length(str) do
        if (str[i] = ' ') and (str[i+1] = ' ') then
            str := copy(str,1,i) + copy(str,i+2,length(str))
        else
            i := i + 1;
    writeln(str);
end.
   drink    who I mark   ten                  one   dump
drink who I mark ten one dump
s = input()
i = 0
while s[i] == ' ':
    s = s[1:]
while s[len(s)-1] == ' ':
    s = s[:-1]
i = 1
while i < len(s)-1:
    if s[i] == ' ' and s[i+1] == ' ':
        s = s[:i+1] + s[i+2:]
    else:
        i += 1
print(s)
    ты что       делаешь    сейч    
ты что делаешь сейч
алг удаление пробелов
нач
  лит s
  цел i
  ввод s
  i := 1
  нц пока s[i] = " "
    s := s[2:длин(s)]
  кц
  нц пока s[длин(s)] = " "
    s := s[1:длин(s)-1]
  кц
  i := 2
  нц пока i < длин(s)
    если s[i] = " " и s[i+1] = " " то
      s := s[1:i] + s[i+2:длин(s)]
     иначе
      i := i + 1
    все
  кц
  вывод s
кон
          кто   где когда   и почему  
кто где когда и почему
input s$
i = 1
while mid(s$,1,1) = " "
        s$ = right(s$,length(s$)-1)
end while
 
while mid(s$,length(s$),1) = " "
        s$ = left(s$,length(s$)-1)
end while
 
i = 2
while i < length(s$)
        if mid(s$,i,1) = " " and mid(s$,i+1,1) = " " then
                s$ = left(s$,i) + right(s$,length(s$)-i-1)
        else
                i = i + 1
        endif
end while
print s$
  where      is   ball  
where is ball

Комментарий

Не понимаю почему в задании, относящемся к теме строк, не используются в предложенном решении строчные методы.

s=input()
st=""
s=s.strip()
for i in range(len(s)):
    n=s.find(" ")
    if n==-1:
        st=st+s
        break
    st=st+s[:n]+' '
    s=s[n+1:]
    s=s.lstrip()
print(st.rstrip())