用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。