当前位置: 首页 > news >正文

std::stringstream 超详细讲解(C++ 字符串流)

std::stringstream 是 C++ 标准库中用于字符串与各种数据类型互相转换、拼接/解析字符串的流工具,本质是把字符串当成输入/输出流来用。

一、头文件
#include<sstream>usingnamespacestd;// 方便演示
二、它能做什么?
  • int / float / 自定义类型拼成字符串
  • 把字符串拆成 int、double、bool 等
  • 替代不安全的 sprintf 、 sscanf
  • 做复杂字符串拼接(比 += 更优雅)
  • 类型安全的格式化输出
三、常用三个类(记这三个就够)
  • stringstream :可读可写
  • istringstream :只用来(从字符串解析)
  • ostringstream :只用来(拼接成字符串)
四、最常用:类型转字符串
inta=123;doubleb=3.14;string s="hello";ostringstream oss;oss<<a<<" "<<b<<" "<<s;string result=oss.str();// 获取最终字符串// result = "123 3.14 hello"
五、最常用:字符串解析成数字
string str="100 20.5";istringstreamiss(str);intx;doubley;iss>>x>>y;// x=100, y=20.5
六、清空与复用

stringstream 不会自动清空内容,也不会自动重置错误位。

清空内容

ss.str("");// 设为空字符串

重置错误状态(如解析失败后)

ss.clear();

通用复用写法:

ss.clear();ss.str("");
七、高级用法:格式化输出

和 cout 一样支持控制格式:

#include<iomanip>ostringstream oss;oss<<hex<<255;// 十六进制oss<<fixed<<setprecision(2)<<3.14159;// 保留2位小数string s=oss.str();// s = "ff3.14"

常用:

  • dec / hex / oct 十进制/十六进制/八进制
  • fixed / scientific 固定小数 / 科学计数
  • setprecision(n) 小数位数
  • setw(n) / left / right 宽度对齐
八、按空格/换行分割字符串(超级常用)
string line="apple banana orange";istringstreamiss(line);string word;while(iss>>word){// 依次得到 apple、banana、orange}
九、和 string 的 += 对比
  • string += :适合简单拼接
  • stringstream :适合混合类型 + 格式化 + 解析,代码更干净、类型安全
十、常见坑

1. 忘记 str()

string s=oss;// 错误string s=oss.str();// 正确
  1. 复用前不清空,会一直追加内容
  2. 解析失败不会抛异常,只会置 failbit
if(!(iss>>x)){// 解析失败}
十一、一句话总结

stringstream =字符串版的 cin/cout,专门用来做:
字符串 ↔ 数字/各种类型的安全转换与格式化。

http://www.jsqmd.com/news/424917/

相关文章:

  • 【ISAC】6G低空经济新突破!协作式ISAC技术实现无人机精准感知与参数估计【附MATLAB代码】
  • 什么是向量数据库?在基于大模型的应用开发中,向量数据库主要解决什么问题?
  • 用for循环输出1~1000之间能被5整除的数,并且每行输出3个
  • 你都了解哪些向量数据库?如何选型?
  • 家长必看!2026宝藏线上机构,助力孩子作文稳步提升 - 品牌测评鉴赏家
  • 家人们谁懂啊!孩子作文像流水账,这些线上机构救大命 - 品牌测评鉴赏家
  • 计算0~100的奇数和、偶数和、总和
  • 向量数据库原理是什么? 请简述下它的原理
  • 45232453
  • 2026年球墨铸铁厂家推荐,资质齐全与售后完善优质企业 - 品牌鉴赏师
  • 计算机毕业设计springboot河北水利电力学院班级事务管理系统 基于SpringBoot的高校班级综合事务管理平台 基于Java的院系班级日常管理与学生服务系统
  • 小学生写作不再愁!3家宝藏线上机构大放送 - 品牌测评鉴赏家
  • 计算机毕业设计springboot河环院校友管理系统 基于SpringBoot的高校校友信息管理与服务平台 基于Java的毕业生联络与资源共享系统
  • 吐血整理!小学语文线上课程红黑榜来袭 - 品牌测评鉴赏家
  • PPO算法(整理)
  • 计算机毕业设计springboot皓皓代驾 基于SpringBoot的即时出行代驾服务平台 基于微信小程序的网约代驾管理系统
  • 【学术对话】
  • 计算机毕业设计springboot和谐校园二手闲置交易平台 基于SpringBoot的高校绿色循环物品交换系统 基于Java的校园闲置资源再利用服务平台
  • 计算机毕业设计springboot航班管理系统 基于SpringBoot的航空客运服务平台设计与实现 基于Java的民航票务综合管理平台开发
  • C++进阶之有序容器vector:用法实例(四百四十)
  • 西门子1215与1212项目实战分享
  • 基于重复控制方法的逆变器的仿真学习笔记
  • 哈尔滨别克GL8发烧汽车音响改装 法国劲浪纯进口黄盆喇叭 阿尔派x120-8DSP功放 美国JL低音炮 哈尔滨专业汽车音响改装隔音降噪店-博士达作品 - 木火炎
  • 计算机毕业设计springboot航空大学就业服务平台 基于SpringBoot的民航院校毕业生就业信息管理系统 基于Java的航空类高校职业发展与招聘服务平台
  • 真的太省时间 8个AI论文工具测评:研究生毕业论文+科研写作必备神器
  • 家长必看!为孩子解锁小学语文素养提升密码 - 品牌测评鉴赏家
  • 家长必看!2026年小学生的语文提分神器在这里 - 品牌测评鉴赏家
  • 基于遗传算法的LQR控制器最优设计算法
  • ROS2-通信机制2-02:工作空间覆盖、元功能包(不同工作空间存在重名功能包时,重名功能包的调用会产生覆盖的情况,这种情况是需要极力避免出现的)
  • AI智能体赋能研讨架构图