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.

posted @ 2016-05-23 08:24  Vincent_Bryan  阅读(1073)  评论(0编辑  收藏  举报