C++ stringstream
C++ 引入了ostringstream、istringstream、stringstream这三个类,这三个类包含在sstream.h头文件中。三个类中
1)istringstream类用于执行C++风格的串流的输入操作;
2)ostringstream类用于执行C风格的串流的输出操作;
3)strstream类同时可以支持两种风格的串流的输入输出操作。
一、stringstream
stringstream的一个重要的作用是用来做数据的转换的,相比其他实现方法,它更加安全、简便。
1)数值转成 string:
在代码中我们先采用科学计数法声明了一个整数n,然后声明了一个stringsteam的实例strm,接着把整数n“流入”到strm里,再让strm中数据“流出”到s中,就成功完成了转换,运行结果如下:
2)string转成数值:
代码中我们先声明了一个string类s,先让它流入到strm再流到n,此时便成功地将s转成double:
不过,假如我们把n的类型声明为int的话,转换依然成功,只是输出的n的值就会是1,因为n未int,所以从strm“流入”n时遇到小数点转换便结束。
3)str(“”) 与clear()
首先,stringstream中有四个标志位常量:
分别可用:fail()、bad()、eof()、good(),查看他们的数值。
当我们调用clear()函数时是将其状态标志位复位,而str(“”)才是清空stringstream流的内容。例如:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 void state(stringstream &strm){ 5 cout <<"*********" << endl; 6 cout << "fail: " << strm.fail() << endl; 7 cout << "bad: " << strm.bad() << endl; 8 cout << "good: " << strm.good() << endl; 9 cout << "eof: " << strm.eof() << endl; 10 cout <<"*********" << endl; 11 } 12 int main(){ 13 string s1 = "1",s2 = "2",s3 = "3"; 14 int n; 15 stringstream strm; 16 strm << s1 << " " << s2; 17 state(strm); 18 strm >> n; 19 cout << n << endl; 20 state(strm); 21 //strm.str(""); 22 strm.clear(); 23 strm << s3; 24 strm >> n; 25 cout << n << endl; 26 state(strm); 27 28 }
我们先将s1和s2流入strm,然后输出s1,调用clear(),在流入s3,最后全部输出来,结果如下:
第二次输出n时为23,说明clear()未将strm清空,假如我们把代码中的str(“”)的注释去掉,而将claear()注释掉,则运行结果如下:
结果说明str(“”)把strm清空了。不过一般情况下,我们都是两个函数一起调用。
//To be continued.