我有一个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
,那么正确的代码是什么?
答案 0 :(得分:4)
ss.good()
只告诉你到目前为止情况是否良好。它没有告诉你,你读的下一件事情会很好。
使用
while (ss >> tmpstr) vpos.push_back(tmpstr);
现在您首先阅读tmpstr
,然后检查流的状态。它相当于:
for (;;) {
istream &result = ss >> tmpstr;
if (!result) break;
vpos.push_back(tmpstr);
}