std::stringstream
是 C++标准库中的一个非常有用的类,它允许你将字符串像流一样进行读写操作。它结合了字符串的灵活性和流操作的便利性,非常适合处理字符串格式化、解析和数据转换等任务。
1.包含头文件
在使用std::stringstream
之前,需要包含头文件<sstream>
:
#include <sstream>
2.常见用法
2.1 字符串格式化
std::stringstream
可以用来将多个数据类型组合成一个字符串,类似于sprintf
,但更安全、更灵活。
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::stringstream ss;
int age = 25;
std::string name = "Alice";
// 向 stringstream 中写入数据
ss << "Name: " << name << ", Age: " << age;
// 将 stringstream 的内容转换为字符串
std::string result = ss.str();
std::cout << result << std::endl; // 输出:Name: Alice, Age: 25
return 0;
}
2.2 字符串分割
std::stringstream
可以用来按分隔符分割字符串,类似于strtok
,但更安全、更灵活。
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main() {
std::string input = "apple,banana,orange";
std::stringstream ss(input);
std::string token;
std::vector<std::string> tokens;
// 按逗号分割字符串
while (std::getline(ss, token, ',')) {
tokens.push_back(token);
}
// 输出分割后的结果
for (const auto& t : tokens) {
std::cout << t << std::endl;
}
return 0;
}
2.3 数据转换
std::stringstream
可以用来将字符串转换为其他数据类型,或者将其他数据类型转换为字符串。
字符串转数字
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string str = "12345";
std::stringstream ss(str);
int num;
// 从字符串中读取数字
ss >> num;
std::cout << "The number is: " << num << std::endl; // 输出:The number is: 12345
return 0;
}
数字转字符串
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::stringstream ss;
int num = 12345;
// 将数字写入 stringstream
ss << num;
// 将 stringstream 的内容转换为字符串
std::string str = ss.str();
std::cout << "The string is: " << str << std::endl; // 输出:The string is: 12345
return 0;
}
3.使用std::istringstream
和std::ostringstream
std::stringstream
是一个双向流,既可以读也可以写。如果你只需要单向操作,可以使用std::istringstream
(用于读取)和std::ostringstream
(用于写入)。
3.1std::istringstream
示例
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string input = "100 200 300";
std::istringstream iss(input);
int a, b, c;
// 从字符串中读取多个值
iss >> a >> b >> c;
std::cout << "a: " << a << ", b: " << b << ", c: " << c << std::endl; // 输出:a: 100, b: 200, c: 300
return 0;
}
3.2std::ostringstream
示例
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::ostringstream oss;
double pi = 3.14159;
// 将数据写入 ostringstream
oss << "The value of pi is approximately " << pi;
// 将 ostringstream 的内容转换为字符串
std::string result = oss.str();
std::cout << result << std::endl; // 输出:The value of pi is approximately 3.14159
return 0;
}
4.总结
std::stringstream
是一个非常强大的工具,适用于以下场景:
• 字符串格式化:将多个数据类型组合成一个字符串。
• 字符串解析:按分隔符分割字符串。
• 数据转换:在字符串和其他数据类型之间进行转换。
希望这些示例能帮助你更好地理解和使用std::stringstream
!如果有任何问题,欢迎随时问我哦。