std::Stringstream是 c++ 中安全灵活的 字符串 与类型转换 工具 ,支持流式读写、格式控制及错误检查,重用时需 str(“”) 清空缓冲并 clear()重置状态。

std::stringstream 是 C++ 标准库 中处理字符串与各种类型之间转换最常用、最安全的 工具 之一,它本质是一个内存中的字符流,用法类似 cin/cout,但目标是 string 而非控制台。
基础用法:构造、写入、读出
创建 stringstream 对象后,可以用 > 提取数据,就像操作标准输入输出流一样。
例如把整数转成字符串:
#include <sstream> #include <string> std::stringstream ss; ss << 123; std::string s = ss.str(); // s == "123"
反过来,把 字符串解析 为数字:
立即学习“C++ 免费学习笔记(深入)”;
std::stringstream ss("456"); int x; ss >> x; // x == 456
注意:>> 提取后流内部位置会移动,多次提取可连续读;若读取失败(如字母转 int),流状态会置为 failbit,可用 ss.fail() 检查。
重用 stringstream 清空缓冲区
同一个 stringstream 对象 可以反复使用,但必须手动清空内容和错误状态,否则后续操作可能失败或读到旧数据。
- ss.str(“”) —— 清空内部字符串缓冲
- ss.clear() —— 重置错误标志(如 failbit、eofbit)
推荐组合使用:
ss.str(""); ss.clear(); ss << 789; int y; ss >> y;
格式控制:进制、填充、精度
stringstream 支持所有 iostream 格式化操作符,比如设置进制、宽度、填充字符、浮点精度等。
- 十六进制输出:
ss → "ff" - 右对齐 + 补零:
ss → "0042" - 保留两位小数:
ss → "3.14"
这些操作符定义在
替代方案对比:为什么 优先选 stringstream?
相比 C 风格的 sprintf 或 C++11 后的 std::to_string / std::stoi,stringstream 更灵活、类型安全、支持自定义类型(只要重载了 >),且能处理复杂混合格式(如 “x=123,y=45.6″)。
- to_string 只支持基本数值转 string,不支持反向或格式控制
- stoi/stol/stof 等函数简单直接,但异常处理单一(仅抛 invalid_argument/ out_of_range)
- stringstream 可逐字段解析、容错更强、适合协议解析、配置读取等场景
不过对纯单次转换,to_string 性能略优;追求极致性能且格式固定,也可考虑 fmt 库或 C++20 的 std::format。
基本上就这些。掌握 str()、clear()、str(“”) 三者配合,再熟悉几个常用操纵符,就能覆盖绝大多数字符串流转换需求。
以上就是 C ++ 中的 std::string