对于fstream和sstream,它们继承了iostream,因此接口支持iostream时,也支持使用fstream和sstream。
sstream,定义了读写内存string对象的类型
sstream头文件,定义了三个类型来支持内存I/O:
1、istringstream :从string读入数据,
2、ostringstream:向string写入数据;
3、stringstream:既可以从string读取数据,也可以向string写入数据。
以下是sstream支持的操作:
sstream strm; // 创建了一个未绑定string内存的sstream对象
sstream strm(s); // 创建了一个绑定到string对象s 的sstream对象
strm.str(); // 返回strm所保存的string拷贝
strm.str(s); // 将string s绑定到strm中,返回void
使用istringstream可以将一个string对象按空格分隔后依次输入到其他string对象中:
因此istringstream对象的常用操作如下:使用getline读入一行到string对象line中,用line初始化一个istringstream对象record,对record使用>>运算符,将string内存中的对象按空格读出,实现了读入多行并按空格分隔后输出。
使用ostringstream对象可以读入多个对象,存在缓冲区中,再合并输入到一个string对象中(去除了空格):
ostringstream os;
// 输入的内容是1 2 3 4 5
while(cin >> s) os << s;
string str = os.str(); // str的内容是12345,去除了空格。
对于在循环中使用stringstream类型,建议使用clear清除内容后重新使用,而不是重新申请,因为stringstream的创建性能较差。