std::stringstream:求教
std::stringstream: seeking advice
下面是我写的一段测试代码,用来验证我对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
输入的值,因此无限循环 运行s。循环的测试条件,即 val > 0
,基于以下内容:
If extraction fails, zero is written to value and failbit is set.
参考:std::basic_istream::operator>>
我在这里错过了什么?
TIA
What am I missing here?
在行ss.str(s2);
之前添加ss.clear();
以清除此处由ss >> val;
设置的EOF的错误标志
执行后会产生:
val: 5
val: 1
val: 4
val: -1
1
4
-1
下面是我写的一段测试代码,用来验证我对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
输入的值,因此无限循环 运行s。循环的测试条件,即 val > 0
,基于以下内容:
If extraction fails, zero is written to value and failbit is set.
参考:std::basic_istream::operator>>
我在这里错过了什么?
TIA
What am I missing here?
在行ss.str(s2);
之前添加ss.clear();
以清除此处由ss >> val;
执行后会产生:
val: 5
val: 1
val: 4
val: -1
1
4
-1