以下是我编写的一段测试代码,以验证我对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
答案 0 :(得分:0)
我在这里想念什么?
在ss.clear();
行之前添加ss.str(s2);
,以清除由ss >> val;
设置的EOF错误标志
执行后会产生:
val: 5
val: 1
val: 4
val: -1
1
4
-1