内核格式化
iostream族(family)支持程序与终端之间的I/O,而fstream族使用相同的接口提供程序和文件之间的I/O。sstream 族,它们也使用相同的接口提供程序和string对象之间的I/O。
因此,可以使用cout的ostream方法将格式化信息写入到string对象中,并使用istream方法(如getline() )来读取string对象中的信息。
读取string对象中的格式化信息或将格式化信息写入string对象被称为内核格式化(incore formatting)。
ostringstream
sstream 头文件定义了一个从ostream类派生而来的 ostringstream 类(还有一个基于wostream 的wostringstream 类,这个类用于宽字符集)。
可以将可用于cout的方法用于 ostringstream 对象。例如:
ostringstream outstr;
double price = 281.00;
char * ps = "for a copy of the ISO/EIC C++ standard!";
outstr.precision(2);
outstr << fixed;
outstr << "Pay only $" << price << ps <<endl;
格式化文本进入缓冲区,在需要的情况下,该对象将使用动态内存分配来增大缓冲区。
ostringstream类有一个名为str() 成员函数,该函数返回一个被初始化为缓冲区内容的字符串对象:
string mesg = outstr.str();
// returns string with formatted information
使用str()方法可以“冻结”该对象,这样便不能将信息写入该对象中。
istringstream
istringstream 类允许使用istream方法族读取 istringstream 对象中的数据,istringstream对象可以使用string对象进行初始化。
假设facts是一个string对象,则要创建与该字符串相关联的istringstream对象,可以这样编写:
istringstream instr(facts); // use facts to initialize stream
这样便可以使用istream方法读取instr中的数据。
例如,如果instr包含大量字符格式的整数,则可以这样读取它们:
int n;
int sum = 0;
while (instr >> n)
sum += n;
简而言之,istringstream 和 ostringstream 类使得能够使用 istream 和 ostream 类的方法来管理存储在字符串中的字符数据。