C++如何使用std::stringstream进行字符串和数字转换?

14次阅读

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

C++如何使用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_charsc++17):最快、零分配、纯函数式,但不支持格式化,且需手动处理错误码
  • std::stoi / std::stod:简洁,抛异常,适合信任输入格式的场合
text=ZqhQzanResources