c++ - 如何读取动态大小的stringstream?

标签 c++ stringstream

我想尝试使用 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/

相关文章:

c++ - 如何提高 pthreads 中的线程优先级?

c++ - 使用 for 语句从数组创建变量

c++ - 如何测试stringstream运算符>>是否已解析错误类型并跳过它

c++ - 使用 stringstream 打印四舍五入的 float

c++ - 将一个字符串流附加到另一个字符串流。什么最安全?

c++ - MSVC 的 _M_X64 预定义宏说明

javascript - 使用 Emscripten 从 JavaScript 异步调用 C++ 函数

c++ - 在 VS2012 中使用另一个项目的界面

c++ - 通过 stringstream 将数字分配给 char*

c++ - 如何重置字符串流对象