带有一个字的字符串后的字符串流奇数行为

时间:2013-05-19 04:55:03

标签: c++ string stringstream

我有这个代码,例如:

#include <iostream>
#include <sstream>

using namespace std;
int main(){
    stringstream ss;
    string buffer,first_word;
    int i;
    for(i = 0; i < 4; i++){
        getline(cin,buffer);    // getting line
        ss.str(buffer);         // initializing the stream
        ss>>first_word;
        cout<<first_word<<endl;
        ss.str(string());       // cleaning stream
    }
    return 0;
}

使用此输入:

line one with spaces
line two with spaces
alone
line four with spaces

我期望的输出只是行的第一个单词,如下所示:

line
line
alone
line

但我得到了这个:

line
line
alone
alone

因此,在获得只有一个单词的行后,stringstream没有更新。

请向我解释一下,我不想用代码给出正确答案,我想知道原因。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果你打算检查流的状态,你会看到这一行:

    ss>>first_word;
    if (!ss.good()) std::cout << "problem." << std::endl;
    cout<<first_word<<endl;

确实输出“问题。”

    ss.str("");
    ss.clear();

解决问题。