C++ IO流:sstream、ostringstream与istringstream详解

需积分: 12 2 下载量 60 浏览量 更新于2024-09-08 收藏 263KB PDF 举报
"C++风格的IO流主要包括三种:stringstream、ostringstream和istringstream,它们都是在头文件<sstream>中定义的。这些流对象提供了方便的文本处理能力,可以在内存中进行输入输出操作,使得数据处理更加灵活。 1. stringstream stringstream 是一个通用的流类,它既可以用于输入也可以用于输出。它结合了istringstream和ostringstream的功能,允许我们将数据读入和写入到同一字符串流中。由于其综合特性,我们通常不需要单独介绍stringstream,因为它能完成istringstream和ostringstream所能做的所有操作。 2. ostringstream ostringstream 对象主要用于构建字符串流,并将写入的数据整合成一个连续的字符串。当我们向ostringstream对象写入多个字符串或者数据时,它们会被按照写入的顺序依次存储。例如,我们可以连续写入多个字符串,然后通过调用.str()成员函数获取整合后的单一字符串。在使用ostringstream时,建议在每次重新使用前清空流,以避免不必要的内存占用。 下面是一个使用ostringstream的例子: ```cpp #include<iostream> #include<sstream> using namespace std; int main() { ostringstream oss; oss << "abcd" << "" << "efghijklm89" << "zxcvbn" << endl; cout << oss.str(); // 输出整合后的字符串 oss << "who"; // 再次写入数据 } ``` 在这个例子中,我们首先创建了一个ostringstream对象oss,然后向其中写入多个字符串。最后通过`oss.str()`获取到的是所有写入数据整合后的单一字符串。 3. istringstream istringstream 主要用于从已有的字符串中读取数据。它可以像处理输入流一样处理字符串,允许我们在字符串中进行搜索、分割等操作。比如,我们可以将一个包含多个数值的字符串读取出来,分别赋值给不同的变量。 使用istringstream的例子: ```cpp #include<iostream> #include<sstream> using namespace std; int main() { string str = "12 34 56 78"; istringstream iss(str); int num1, num2, num3, num4; iss >> num1 >> num2 >> num3 >> num4; cout << "Numbers read: " << num1 << ", " << num2 << ", " << num3 << ", " << num4 << endl; } ``` 在这个例子中,我们创建了一个istringstream对象iss,并用一个包含多个数字的字符串初始化它。然后,我们使用>>运算符逐个读取并解析出字符串中的数值。 总结来说,C++的sstream库提供了一种高效且灵活的方式处理字符串中的数据,使得在内存中进行IO操作变得简单而强大。无论是构建新的字符串流,还是从已有字符串中提取数据,这些IO流对象都提供了极大的便利。