Перейдите к дублирующимся вопросам, чтобы узнать, как разбить строку на слова, но ваш метод на самом деле правильный. Фактическая проблема заключается в том, как вы читаете ввод до , пытаясь его разбить:
string tempInput;
cin >> tempInput; // !!!
Когда вы используете cin >> tempInput
, вы получаете только первое слово из ввода, а не весь текст. Есть два возможных пути выхода из этого, самый простой из которых - забыть о stringstream
и напрямую повторять ввод:
std::string tempInput;
std::vector< std::string > tokens;
while ( std::cin >> tempInput ) {
tokens.push_back( tempInput );
}
// alternatively, including algorithm and iterator headers:
std::vector< std::string > tokens;
std::copy( std::istream_iterator<std::string>( std::cin ),
std::istream_iterator<std::string>(),
std::back_inserter(tokens) );
Этот подход даст вам все токены на входе в одном векторе. Если вам нужно работать с каждой строкой отдельно, вам следует использовать getline
из заголовка <string>
вместо cin >> tempInput
:
std::string tempInput;
while ( getline( std::cin, tempInput ) ) { // read line
// tokenize the line, possibly with your own code or
// any answer in the 'duplicate' question
}