我想尝试使用 stringstream 进行作业,但我对它的工作原理有点困惑。我进行了快速搜索,但找不到任何可以回答我问题的内容。
假设我有一个动态大小的流,我怎么知道什么时候停止写入变量?
string var = "2 ++ asdf 3 * c";
stringstream ss;
ss << var;
while(ss){
ss >> var;
cout << var << endl;
}
我的输出是:
2
++
asdf
3
*
c
c
我不确定为什么最后会有额外的“c”,尤其是因为 _M_in_cur = 0x1001000d7 ""
最佳答案
你在最后得到了额外的 c
,因为你在执行提取后没有测试流是否仍然良好:
while (ss) // test if stream is good
{
ss >> var; // attempt extraction <-- the stream state is set here
cout << var; // use result of extraction
}
您需要测试执行提取和使用结果之间的流状态。通常这是通过在循环条件中执行提取来完成的:
while (ss >> var) // attempt extraction then test if stream is good
{
cout << var; // use result of extraction
}
关于c++ - 如何读取动态大小的stringstream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3757074/