这些是 C++ 中与字符串流相关的类:
istringstream
• 功能:用于从字符串中读取数据,就像从输入流(如 cin)中读取数据一样。它将一个字符串视为一个输入源,允许你使用流提取运算符(>>)来提取其中的数据。
• 示例:
#include <sstream>
#include <iostream>
#include <string>
int main() {
std::string data = "123 456";
std::istringstream iss(data);
int num1, num2;
iss >> num1 >> num2;
std::cout << "num1: " << num1 << ", num2: " << num2 << std::endl;
return 0;
}
在上述示例中,istringstream 对象 iss 从字符串 data 中读取两个整数,并分别存储到 num1 和 num2 中。
ostringstream
• 功能:用于将数据写入到一个字符串中,类似于向输出流(如 cout)写入数据。你可以使用流插入运算符(<<)向 ostringstream 对象中插入各种类型的数据,最后可以通过调用 str() 成员函数获取生成的字符串。
• 示例:
#include <sstream>
#include <iostream>
#include <string>
int main() {
std::ostringstream oss;
oss << "Hello, " << 123 << " World!";
std::string result = oss.str();
std::cout << result << std::endl;
return 0;
}
这里,ostringstream 对象 oss 将字符串和整数组合成一个新的字符串,然后通过 str() 获取并输出。
stringstream
• 功能:它兼具 istringstream 和 ostringstream 的功能,既可以从字符串中读取数据,也可以向字符串中写入数据。
• 示例:
#include <sstream>
#include <iostream>
#include <string>
int main() {
std::stringstream ss;
ss << "123";
int num;
ss >> num;
std::cout << "num: " << num << std::endl;
ss.clear();
ss << "Hello";
std::string str;
ss >> str;
std::cout << "str: " << str << stdendl;
return 0;
}
在这个例子中,先向 stringstream 对象 ss 写入一个整数字符串,然后读取出来;接着清除流状态,再写入一个字符串,然后读取出来。
这些字符串流类在需要对字符串进行复杂的格式化输入输出操作时非常有用,能够方便地将不同类型的数据转换为字符串,或者从字符串中提取出不同类型的数据,提高了代码的灵活性和可读性。