перевернуть слова в предложении, используя istringstream и istream_iterator - PullRequest
0 голосов
/ 22 января 2020

Попытка решить проблему с помощью конструкций C ++. Ссылка на каждое слово в предложении взята и обратная. Но изменения не видны в первоначальном предложении.

class Solution {
public:
    string reverseWords(string s) {
        istringstream ss(s);
        for(auto w = istream_iterator<string>(ss); w != istream_iterator<string>(); w++)
        {
            /* changes of the below 2 lines are not reflected in the main sentence*/
            string &str = const_cast<string&>(*w);
            reverse(str.begin(),str.end());           
        }
        reverse(s.begin(),s.end());
    return s;
    }
};

1 Ответ

0 голосов
/ 22 января 2020

Я не думаю, что можно использовать потоки без копирования слова, поскольку поток всегда извлекает слово в отдельную строку. В вашей попытке вы также модифицируете такую ​​копию, поэтому вы получаете исходную строку. Я бы просто использовал итераторы (это должно восприниматься как псевдокод, может не компилироваться):

auto last = s.begin();
auto cur = s.begin();

while (cur != s.end()) {
  if (!isalpha(*(cur++))) {
     reverse(last, cur);
     last = cur;
  }
}

reverse(last, cur);
return s;
...