std::stringstream用于字符串与数据类型转换,支持写入拼接、格式化解析、清空重用及格式控制,适用于配置解析与日志拼接等场景。

在C++中,std::stringstream 是一个非常实用的工具,用于在字符串和各种数据类型之间进行转换。它属于
1. 字符串流的基本构造与写入
创建一个 stringstream 对象后,可以像使用 cout 一样用 操作符向其中写入数据。
常见写入方式:
- 支持整数、浮点数、字符串等基本类型的拼接
- 可多次写入,内容会追加到内部缓冲区
#include#include #include std::stringstream ss; ss << "年龄:" << 25 << ", 身高:" << 175.5; std::cout << ss.str(); // 输出:年龄:25, 身高:175.5
2. 读取字符串流中的数据
使用 >> 操作符可以从 stringstream 中按字段提取数据,类似 cin 的行为。
立即学习“C++免费学习笔记(深入)”;
适用于解析格式化的字符串,比如从一行文本中提取多个值。
std::string input = "张三 20 85.5"; std::stringstream ss(input); std::string name; int age; double score; ss >> name >> age >> score; // 成功提取:name="张三", age=20, score=85.5
如果输入格式不匹配,提取会失败,可通过检查流状态判断。
3. 清空与重用 stringstream
stringstream 内部有缓冲区和状态标志,重复使用前需要清空内容和状态。
常见清空方法:
- ss.str(std::string()); —— 清空内容
- ss.clear(); —— 重置错误状态(如 eof、fail)
ss.str(""); // 设置为空字符串
ss.clear(); // 清除状态标志
// 此时可重新写入
4. 格式化控制输出
stringstream 支持 iomanip 中的格式控制,可用于数字格式化。
例如设置精度、进制、填充等。
#includestd::stringstream ss; ss << std::fixed << std::setprecision(2) << 3.14159; // 结果:"3.14" ss << " 0x" << std::hex << 255; // 追加后为:"3.14 0xff"
基本上就这些。stringstream 在处理配置解析、日志拼接、数值转字符串等场景中非常方便,掌握好读写和清空方式就能避免常见问题。不复杂但容易忽略状态管理。











