std::stringstream 通过内存流机制实现字符串与数字双向转换:写入数字自动转字符串,读取字符串尝试解析为数字;支持格式控制、错误检查及多类型混合操作,但开销略大。

用 std::stringstream 转换字符串和数字,核心是把它当作一个“内存中的流”来读写:写入数字会自动转成字符串,读入字符串会尝试解析成数字。
字符串转数字(如 string → int)
把字符串放入 stringstream,再用 >> 提取到目标类型变量中。失败时流状态会置为 failbit,建议检查。
- 先构造
std::stringstream ss(str)或用ss - 再用
ss >> num尝试读取,返回值可判断是否成功 - 如果字符串含多余字符(如
"123abc"),读取 123 后流不会报错,但ss.peek() != EOF可检测残留
数字转字符串(如 int → string)
把数字写入 stringstream,再调用 .str() 获取结果字符串。
- 写法简洁:
std::stringstream ss; ss - 支持格式控制:如
ss 得到"ff",或std::setprecision(2) - 比
std::to_string更灵活,适合拼接、带格式、多类型混合输出
安全转换的推荐写法
避免隐式失败,封装成带校验的函数更可靠:
立即学习“C++免费学习笔记(深入)”;
- 字符串转整数:提取后检查
ss.fail() || !ss.eof() - 字符串转浮点:同样检查失败位,注意科学计数法(如
"1e3")默认支持 - 多次转换前调用
ss.clear()清除错误状态,再用ss.str("")清空内容
替代方案对比
std::stringstream 功能全但稍重;简单场景可考虑:
-
std::to_string:仅支持基本数字→string,无格式控制,无错误反馈 -
std::from_chars(C++17):最快、零分配、纯函数式,但不支持格式化,且需手动处理错误码 -
std::stoi / std::stod:简洁,抛异常,适合信任输入格式的场合










