C++ 将字符串拆分为单词向量
我有一个C++ 将字符串拆分为单词向量,c++,string,stream,C++,String,Stream,我有一个字符串类似于的“ABC DEF”,末尾有空格。我想将其转换为字符串的向量,如{“ABC”“DEF”},因此我使用了字符串流: string s = "ABC DEF "; stringstream ss(s); string tmpstr; vector<string> vpos; while (ss.good()) { ss >> tmpstr; vpos.push_back(tmpstr); } string s=“ABC DEF”; 溪流s
字符串
类似于的“ABC DEF”
,末尾有空格。我想将其转换为字符串的向量
,如{“ABC”“DEF”}
,因此我使用了字符串流
:
string s = "ABC DEF ";
stringstream ss(s);
string tmpstr;
vector<string> vpos;
while (ss.good())
{
ss >> tmpstr;
vpos.push_back(tmpstr);
}
string s=“ABC DEF”;
溪流ss(s);;
字符串tmpstr;
向量VPO;
while(ss.good())
{
ss>>tmpstr;
vpos.推回(tmpstr);
}
但是,vpos
的结果是{“ABC”“DEF”“DEF”}
。为什么最后一个单词会在向量中重复?如果需要使用stringstream
,正确的代码是什么?ss.good()
只会告诉您到目前为止情况是否良好。它并没有告诉你下一篇你读的东西会是好的
使用
现在,您首先阅读tmpstr
,然后检查流的状态。这相当于:
for (;;) {
istream &result = ss >> tmpstr;
if (!result) break;
vpos.push_back(tmpstr);
}
ss.good()。它并没有告诉你下一篇你读的东西会是好的
使用
现在,您首先阅读tmpstr
,然后检查流的状态。这相当于:
for (;;) {
istream &result = ss >> tmpstr;
if (!result) break;
vpos.push_back(tmpstr);
}
谢谢你的回答。我发现返回值的类型是istream
,因此我编写了while(istream obj=ss>>tmpstr)
,但它似乎是错误的。那么ss>>tmpstr
背后的语法是什么呢?谢谢你的解释!我学到了很多。谢谢你的回答。我发现返回值的类型是istream
,因此我编写了while(istream obj=ss>>tmpstr)
,但它似乎是错误的。那么ss>>tmpstr
背后的语法是什么呢?谢谢你的解释!我学到了很多。@CaptainObvlious:不是真的,不是。基本逻辑:ss.good()
不能预知未来@轻快赛道-非常正确。投票被撤回。@CaptainObvlious:不太可能,不可能。基本逻辑:ss.good()
无法预测未来@轻快赛道-非常正确。接近票数的投票被撤回。