c++ - 将字符串拆分为单词 vector

标签 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"}。为什么最后一个词会在 vector 中重复?如果需要使用 stringstream,正确的代码是什么?

最佳答案

ss.good() 只会告诉您到目前为止情况是否良好。它不会告诉您接下来阅读的内容会很好。

使用

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

现在您首先读取 tmpstr,然后检查流的状态。它等同于:

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

关于c++ - 将字符串拆分为单词 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25539747/

相关文章:

c++ - RE2C 如何丢弃当前匹配的规则并继续尝试?

string - 将 Go rune 转换为字符串

c++ - 在 C++ 中将 webM 文件作为参数传递?

c++ - 在 C++ 中使用 seekg 的问题

c++ - OpenCl:示例 float4 程序 - 段错误(核心已转储)

c++ - 中间变量和直接返回函数调用之间有区别吗?

c++ - 对象分配的困惑行为

c# - string.IsNullOrEmpty(string) 与 string.IsNullOrWhiteSpace(string)

char pwdToTest[4] = "ABCD";我如何检测C中字符串的结尾?

java - 如何使用多个数据源获得 3 个线程池?