c++字符串操作之std::ostringstream踩坑日记

在开发过程中经常会遇到字符串操作,而std::string又没有format操作,这就很难受了。
于是我找到了std::ostringstream类;ostringstream类的用法也很简单,就是流操作。
头文件:include <sstream>
如:
int number = 14;
double ddata = 21.7;
char* pstr = "test";
std::ostringstream ostr;
ostr << "开始测试:" << std::endl;
ostr << "整形数据为:" << number << std::endl;
ostr << "浮点数为:" << ddata << std::endl;
ostr << "字符串为:" << pstr << std::endl;
std::cout << ostr.str();//str()是以std::string的形式返回

输出结果是这样的

开始测试:
整形数据为:14
浮点数为:21.7
字符串为:test
但是问题来了,通常一个变量或对象需要重复使用。那我要如何清除流中的数据呢?
一般的思路都是clear()。因为在STL容器里习惯都是clear()方法清空容器。所以第一反应都是用clear()方法来清除流中的数据。
试调用,ostr.clear();编译不报错(说明有这个方法存在,心想那就没错了,聪明的我一猜就对)。
int number = 14;
double ddata = 21.7;
char* pstr = "test";
std::ostringstream ostr;
ostr << "开始测试:" << std::endl;
ostr.clear();
ostr << "整形数据为:" << number << std::endl;
ostr.clear();
ostr << "浮点数为:" << ddata << std::endl;
ostr.clear();
ostr << "字符串为:" << pstr << std::endl;
ostr.clear();
std::cout << ostr.str();//str()是以std::string的形式返回

理论上说输出应该是这样的

字符串为:test
结果很打脸,无论我怎么调用clear()都无法清除ostr缓存中的数据。输出结果都是这样的:
开始测试:
整形数据为:14
浮点数为:21.7
字符串为:test

经过一番查找资料发现,原来在STL的所有流中clear的含义均为清空错误标记!并非是清空容器。。。
巨坑,习惯性的认为clear()方法就是清空内容,但实际上他是清除错误标记。
那我需要清空内容该如何呢?
需要用void str ( const string & s )方法,该方法是重新给ostringstream灌新值的意思。
如:

int number = 14;
double ddata = 21.7;
char* pstr = "test";
std::ostringstream ostr;
ostr << "开始测试:" << std::endl;
ostr.str("");
ostr << "整形数据为:" << number << std::endl;
ostr.str("");
ostr << "浮点数为:" << ddata << std::endl;
ostr.str("");
ostr << "字符串为:" << pstr << std::endl;
ostr.str("");
std::cout << ostr.str();//str()是以std::string的形式返回

输出结果为:

字符串为:test

神奇吧。。。
同理 ostr.str(“Hello”)将会使ostr中的内容为"Hello"。但注意:ostr.str(“Hello”); ostr << “World”;的执行结果将会变成"World"而不是"HelloWorld"。

相信不少程序猿都踩过这个坑吧!

c++字符串操作之std::ostringstream踩坑日记相关推荐

  1. 全志哪吒D1-H Tina Linux Ubuntu 22.04入门踩坑日记

    哪吒D1-H Tina Linux入门踩坑日记 系统环境 源码编译 mklibs-readelf的C++标准问题 m4的SIGSTKSZ问题 libfakeroot的_STAT_VER问题 read_ ...

  2. Win11 + Ubuntu18.04 双系统踩坑日记

    Win11 + Ubuntu18.04 双系统踩坑日记 前言 准备工作 硬件配置 镜像下载 Win11镜像下载 Ubuntu镜像下载 启动盘准备 Win11启动盘 Ubuntu启动盘 Win11安装 ...

  3. Antd Pro V4 protable详解(ps:踩坑日记)

    Antd Pro V4 protable详解(ps:踩坑日记) 写在前面: 在这篇文章中,你会了解到: protable 中的cloumns属性详解 protable数据加载和处理(两种方法,直接使用 ...

  4. 关于我使用vant组件的踩坑日记

    啦啦啦~~~又是晴朗的一天~今天用vue+vant组件写h5移动端项目需要使用的到一个Actionsheet 弹窗,就是想实现一个这shai的效果: 当我悠哉悠哉的翻阅文档,哎~找到了我想要的 然后我 ...

  5. 【Flutter混合开发踩坑日记之‘applicationVariants‘ for extension ‘android‘】

    Flutter混合开发踩坑日记之'applicationVariants' for extension 'android' 正文 坑一:Could not get unknown property ' ...

  6. Swarm-BZZ踩坑日记之 如何让METMASK小狐狸显示gbzz

    刚入门bzz的新手还不知道小狐狸是什么的请移步上一章节:Swarm-BZZ踩坑日记之 如何在METMASK小狐狸导入节点地址 在浏览器安装好小狐狸,并添加自己的钱包地址后 会发现只显示ETH,并不显示 ...

  7. ReactNative 在丁香医生项目中引入的踩坑日记

    ReactNative 在丁香医生项目中引入的踩坑日记 this没绑定到函数导致空指针 参考 React-Native 踩坑第二弹-undefined is not a function(evalua ...

  8. springboot踩坑日记—nacos: Error watching Nacos Service change

    springboot踩坑日记-nacos: Error watching Nacos Service change Spring Boot :: (v2.1.5.RELEASE) 错误代码: 07-3 ...

  9. 微信小程序踩坑日记-微信小程序首次加载样式错乱问题

    微信小程序踩坑日记-微信小程序首次加载样式错乱问题 在实际开发项目中,遇到了个棘手的问题,就是在某些因素下,进入小程序发现有些样式发生偏移.错乱等问题 问题原因:-未知(估计是组件的问题) ↓ 解决办 ...

最新文章

  1. DDM实践:数据库秒级平滑扩容方案
  2. Android线程模型和AsyncTask
  3. ThreadPoolTaskExecutor多线程使用,及线程池配置
  4. Android 打开网页搜索关键词
  5. jackson json 转换Bean, Bean 里没有对应的值 jackson Unrecognized field
  6. matlab计算流函数,hanyeah
  7. Qt-lesson2-qss定制/dll封装-20190406
  8. 文字排版不可不看的优秀案例合集
  9. [小笔记]TypeScript/JavaScript模拟Python中的Range函数
  10. 也谈怎么学好英语这件小事(转)
  11. 计算机视觉论文-2021-07-28
  12. 深入理解bootloader_1----- bootloader的初步概念
  13. 1.冯诺依曼体系结构组成及其特点
  14. suse 卸载mysql_suse9上安装和卸载Mysql
  15. 如何使用 scp 递归复制目录
  16. ZJM 与纸条(KMP算法)
  17. 微软的Edge浏览器越来越有趣
  18. htc one x android5.0,终于来了 HTC One M8升级Android 5.0体验
  19. 颜色混合BlendFunc用法实例总结
  20. JTA Error creating bean with name 'transactionManager' defin

热门文章

  1. 【IoT】 产品设计:分析方法之SWOT、PEST和波特五力模型
  2. 微软 IE 紧急补丁即将发布!
  3. 装ghost遇到的问题之一“Windows failed to start. A Recent hardware or software change might be the cause.”
  4. 悬赏任务小程序源码有什么功能?
  5. adodb mysql.inc.php,php adodb操作mysql数据库示例(增删改查)
  6. ICSharpCode.TextEditor如何自定义代码折叠和高亮
  7. python中网络编程(持续更新)
  8. 为何八位有符号整数的范围是-128~127,而不是-127~128
  9. 还在关注“宏颜获水”?DuerOS 5.0让你更惊讶
  10. CentOS7安装ngnix