2016-01-22 23:34:08|?次阅读|上传:wustguangh【已有?条评论】发表评论
描述:该类可以实现istringstream和ostringstream的功能,支持<<、>>运算符,同样也可以实现字符串到其它类型数据的快速转换。
stringstream的构造函数原型如下:
stringstream::stringstream(string str);
也可以使用字符串对stringstream进行初始化:
stringstream str("1234"); str.str("1234");//把字符串"1234"存入字符串流中
该类通常用来实现数据转换,也用于将文件数据一次性读入内存进行分析。
举例1:基本数据类型转换为字符串。
/*基本数据类型变字符串*/ #include <fstream> #include <iostream> #include <sstream> using namespace std; int main() { /*整型变字符串*/ int n = 10; string str; stringstream stream; stream << n; stream >> str; cout<<str<<endl; stream.clear();//多次使用stringstream,要先清空下,不能使用stream.str("");否则下面输出10 /*char* 变 string*/ char cStr[10] = "china"; stream << cStr; stream >> str; cout<<str<<endl; system("pause"); return 1; }
举例2:将字符串转换为基本数据类型
/*字符串变基本数据类型*/ #include <fstream> #include <iostream> #include <sstream> using namespace std; int main() { /*字符串 变 double*/ double n; string str = "12.5"; stringstream stream; stream << str; stream >> n; cout<<n<<endl; stream.clear();//多次使用stringstream,要先清空下,不能使用stream.str(""); /*string 变 char* */ string str1 = "china"; char cStr[10]; stream << str1; stream >> cStr; cout<<cStr<<endl;//输出china system("pause"); return 1; }
多次使用stringstream,你需要先调用stringstream的clear()函数,但它并不清空任何内容,只是重置了流的状态标志,下面是一个示例:
#include <iostream> #include <sstream> using namespace std; int main(int argc,char *argv[]) { std::stringstream stream; string str; while(1) { //clear(),这个名字让很多人想当然地认为它会清除流的内容。 //实际上,它并不清空任何内容,它只是重置了流的状态标志而已! stream.clear(); // 去掉下面这行注释,清空stringstream的缓冲,每次循环内存消耗将不再增加! //stream.str(""); stream<<"sdfsdfdsfsadfsdafsdfsdgsdgsdgsadgdsgsdagasdgsdagsadgsdgsgdsagsadgs"; stream>>str; //测试输出每次循环,你的内存消耗增加了多少! cout<<"Size of stream = "<<stream.str().length()<<endl; system("PAUSE"); } system("PAUSE"); return EXIT_SUCCESS; }
由于stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),但如果你要在程序中用同一个流,反复读写大量的数据,将会造成大量的内存消耗,因些这时候,需要适时地清除一下缓冲 (用 stream.str("") )。
另外不要企图用 stream.str().resize(0),或 stream.str().clear() 来清除缓冲,使用它们似乎可以让stringstream的内存消耗不要增长得那么快,但仍然不能达到清除stringstream缓冲的效果,内存的消耗还在缓慢的增长!,至于stream.flush(),则根本就起不到任何作用。
本文参考:http://www.cnblogs.com/gamesky/archive/2013/01/09/2852356.html