将字符串拆分为单词矢量

时间:2014-08-28 02:22:41

标签: c++ string stream

我有一个string,如"ABC DEF ",最后有空格。我想将其转换为vector字符串{"ABC" "DEF"},因此我使用了stringstream

string s = "ABC DEF ";
stringstream ss(s);
string tmpstr;
vector<string> vpos;
while (ss.good())
{
    ss >> tmpstr;
    vpos.push_back(tmpstr);
}

但是,结果vpos{"ABC" "DEF" "DEF"}。为什么最后一个单词会在向量中重复?如果需要使用stringstream,那么正确的代码是什么?

1 个答案:

答案 0 :(得分:4)

ss.good()只告诉你到目前为止情况是否良好。它没有告诉你,你读的下一件事情会很好。

使用

while (ss >> tmpstr) vpos.push_back(tmpstr);

现在您首先阅读tmpstr,然后检查流的状态。它相当于:

for (;;) {
    istream &result = ss >> tmpstr;
    if (!result) break;
    vpos.push_back(tmpstr);
}