Załóżmy, że masz łańcuch o rozmiarze n, czyli będzie indeksowany od 0 do n - 1. W pętli gdy ‘i’ przyjmie wartość n to wyjdziesz poza zakres łańcucha. Dodatkowo w ciele pętli chcesz i + 1 wyraz czyli musisz skrócić zasięg o kolejne jeden:
for(int i=0; i<s.length() - 1; i++)
Natomiast co najmniej odnosi do tej części kodu (UB do C++11):
while(s[i]==s[i+1])
{
i++;
}
Spróbuj jeszcze pokombinować. Może łatwiej byłoby to wykonać liniowo np ustawiając flagę gdy sprawdzany znak jest spacją?