用sstream这个库的优势就在于存入类型的数据可以直接进行转换,并且不用担心缓冲区的溢出现象,因为这些对象会根据需要自动分配空间。
1.istringstream的用法
在C++中有三个类ostringstream、istringstream、stringstream,包含在头文件<sstream.h>中。
istringstream类用于执行C++风格的串流的输入操作。
ostringstream类用于C风格的串流的输出操作。
stringstream类同时可以支持C风格的串流的输入输出操作。
istringstream类是从istream和stringstreambase派生而来,ostringstream是从ostream和stringstreambase派生而来, stringstream则是从iostream类和stringstreambase派生而来。
他们关系图如下:
各自的具体用法如下
1.istringstream
构造函数原形:istringstream::istringstream(string str);
该函数即对字符串进行读取,如下面的例子istr中,分开读取,当碰到空格后即进行分割,对应的类型要读取到相应类型的变量中。
#include <iostream> #include<sstream> using namespace std; int main() { istringstream istr("100 0.123456 abc"); string s; while(istr>>s) cout<<s<<endl; int a; double b; istr>>a>>b>>s; cout<<a<<endl<<b<<endl<<s<<endl; return 0; }
2.ostringstream
构造函数原形:ostringstream::ostringstream(string str);
它的功能主要是向一个string中插入字符,可以通过put函数或者左移操作符来插入,但需要注意的是,如果插入前已经调用构造函数使串里有了一定长度的字符串,那么当插入时,不是在原有字符串基础上直接进行插入,而是按顺序依次修改原来的字符,如果插入字符后,使字符串长度超出原有字符串长度时,则增加长度。
#include <iostream> #include<sstream> using namespace std; int main() { ostringstream ostr("abcder"); ostr.put('d'); ostr.put('e'); ostr<<"fg"; string gstr=ostr.str(); cout<<gstr<<endl; return 0; }
3.stringstream
构造函数的原形:stringstream::stringstream(string str);
相当于即包含了istringstream又包含了ostringstream。