c++字符串操作之std::ostringstream踩坑日记
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踩坑日记相关推荐
- 全志哪吒D1-H Tina Linux Ubuntu 22.04入门踩坑日记
哪吒D1-H Tina Linux入门踩坑日记 系统环境 源码编译 mklibs-readelf的C++标准问题 m4的SIGSTKSZ问题 libfakeroot的_STAT_VER问题 read_ ...
- Win11 + Ubuntu18.04 双系统踩坑日记
Win11 + Ubuntu18.04 双系统踩坑日记 前言 准备工作 硬件配置 镜像下载 Win11镜像下载 Ubuntu镜像下载 启动盘准备 Win11启动盘 Ubuntu启动盘 Win11安装 ...
- Antd Pro V4 protable详解(ps:踩坑日记)
Antd Pro V4 protable详解(ps:踩坑日记) 写在前面: 在这篇文章中,你会了解到: protable 中的cloumns属性详解 protable数据加载和处理(两种方法,直接使用 ...
- 关于我使用vant组件的踩坑日记
啦啦啦~~~又是晴朗的一天~今天用vue+vant组件写h5移动端项目需要使用的到一个Actionsheet 弹窗,就是想实现一个这shai的效果: 当我悠哉悠哉的翻阅文档,哎~找到了我想要的 然后我 ...
- 【Flutter混合开发踩坑日记之‘applicationVariants‘ for extension ‘android‘】
Flutter混合开发踩坑日记之'applicationVariants' for extension 'android' 正文 坑一:Could not get unknown property ' ...
- Swarm-BZZ踩坑日记之 如何让METMASK小狐狸显示gbzz
刚入门bzz的新手还不知道小狐狸是什么的请移步上一章节:Swarm-BZZ踩坑日记之 如何在METMASK小狐狸导入节点地址 在浏览器安装好小狐狸,并添加自己的钱包地址后 会发现只显示ETH,并不显示 ...
- ReactNative 在丁香医生项目中引入的踩坑日记
ReactNative 在丁香医生项目中引入的踩坑日记 this没绑定到函数导致空指针 参考 React-Native 踩坑第二弹-undefined is not a function(evalua ...
- springboot踩坑日记—nacos: Error watching Nacos Service change
springboot踩坑日记-nacos: Error watching Nacos Service change Spring Boot :: (v2.1.5.RELEASE) 错误代码: 07-3 ...
- 微信小程序踩坑日记-微信小程序首次加载样式错乱问题
微信小程序踩坑日记-微信小程序首次加载样式错乱问题 在实际开发项目中,遇到了个棘手的问题,就是在某些因素下,进入小程序发现有些样式发生偏移.错乱等问题 问题原因:-未知(估计是组件的问题) ↓ 解决办 ...
最新文章
- DDM实践:数据库秒级平滑扩容方案
- Android线程模型和AsyncTask
- ThreadPoolTaskExecutor多线程使用,及线程池配置
- Android 打开网页搜索关键词
- jackson json 转换Bean, Bean 里没有对应的值 jackson Unrecognized field
- matlab计算流函数,hanyeah
- Qt-lesson2-qss定制/dll封装-20190406
- 文字排版不可不看的优秀案例合集
- [小笔记]TypeScript/JavaScript模拟Python中的Range函数
- 也谈怎么学好英语这件小事(转)
- 计算机视觉论文-2021-07-28
- 深入理解bootloader_1----- bootloader的初步概念
- 1.冯诺依曼体系结构组成及其特点
- suse 卸载mysql_suse9上安装和卸载Mysql
- 如何使用 scp 递归复制目录
- ZJM 与纸条(KMP算法)
- 微软的Edge浏览器越来越有趣
- htc one x android5.0,终于来了 HTC One M8升级Android 5.0体验
- 颜色混合BlendFunc用法实例总结
- JTA Error creating bean with name 'transactionManager' defin
热门文章
- 【IoT】 产品设计:分析方法之SWOT、PEST和波特五力模型
- 微软 IE 紧急补丁即将发布!
- 装ghost遇到的问题之一“Windows failed to start. A Recent hardware or software change might be the cause.”
- 悬赏任务小程序源码有什么功能?
- adodb mysql.inc.php,php adodb操作mysql数据库示例(增删改查)
- ICSharpCode.TextEditor如何自定义代码折叠和高亮
- python中网络编程(持续更新)
- 为何八位有符号整数的范围是-128~127,而不是-127~128
- 还在关注“宏颜获水”?DuerOS 5.0让你更惊讶
- CentOS7安装ngnix