Что делает stringstream и не только?

Рейтинг: 2Ответов: 1Опубликовано: 09.10.2014

Что делает класс stringstream?

stringstream ss(input);    
while (ss >> input)

По логике программы, так понимаю, что я ввожу строку ss, после чего включается цикл и по одному слову оно начинает передавать из ss в input?

Вторая беда вот эта.

    if(input.front() == input.back())
    {

        size_t found = output.find(input);
        if (found == string::npos)
        {
            output.append(input);
            output.append(" ");
        }
    }

И так проверяет в слове, равны ли первый и последний символ. Дальше непонятно. Строка output пустая, как оно может в ней искать подстроку input?
В общем, можно поподробней разъяснить, как тут все работает?

Ответы

▲ 4Принят
  1. stringstream — это такой же stream, как и, например, cin, только его содержимое берётся не из входного потока программы, а из данной ему строки. Эффект от вашего кода в принципе такой же, как от while (cin >> input), если бы пользователь ввёл содержимое input вручную (но программа не останавливается в ожидании ввода). Заметьте, что переменная input используется дважды: один раз чтобы инициализировать stringstream, а потом в цикле читая куски этого самого stringstream. (Это не очень красиво, я бы не пожалел объявить для нового смысла новую переменную.)
  2. Это вначале строка output пустая, а после первого раза в ней добавится текст. Попробуйте протрассировать программу для такой исходной строки: "one one ne two two", вам сразу станет яснее.