std :: stringstream:寻求建议

时间:2019-01-11 07:51:38

标签: c++14 stringstream

以下是我编写的一段测试代码,以验证我对stringstream如何工作的理解:

#include<iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>

using std::cout;
using std::endl;
using std::vector;
using std::string;
using std::stringstream;
using std::for_each;

int main (void){

   string s1 = "5";
   string s2 = "1 4 -1 6 0";
   vector<int> v;
   int val = 0;

   stringstream ss(s1);
   ss >> val;
   cout << "val: " << val << endl;

   ss.str(s2);
   while(val > 0){
      ss >> val;
      cout << "val: " << val << endl;
      v.push_back(val);
   }
   for_each(v.begin(), v.end(), [](int& i){cout << i << endl;});

   return 0;
}

编译代码时:

  

g ++ -ggdb -std = c ++ 14 -Wall <filename.cpp>

运行,提取s1的值并将其输入到val中。

在第二种情况下,尝试从s2中连续提取并输入到val中是行不通的。 val保留从s1输入的值,因此循环无限运行。循环的测试条件即val > 0基于以下条件:

  

如果提取失败,则将零写入值并设置故障位。

参考:std::basic_istream::operator>>

我在这里想念什么?

TIA

1 个答案:

答案 0 :(得分:0)

  

我在这里想念什么?

ss.clear();行之前添加ss.str(s2);,以清除由ss >> val;设置的EOF错误标志

执行后会产生:

val: 5
val: 1
val: 4
val: -1
1
4
-1