博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++:ostringstream如何清空
阅读量:6403 次
发布时间:2019-06-23

本文共 2266 字,大约阅读时间需要 7 分钟。

 

 

今天写C++Primer IO部分8.13题的时候,代码是这样写的:

#include
#include
#include
#include
#include
using std::cout;using std::cin;using std::endl;using std::fstream;using std::istringstream;using std::ostringstream;using std::string;using std::vector;using std::begin;using std::end;struct PersonInfo{ string strName; vector
vecStr;};int main(){ vector
vecPer; PersonInfo per; fstream ifs("./infile.txt",fstream::in); fstream ofs("./outfile.txt",fstream::out); istringstream iss; ostringstream oss; string str; while(getline(ifs,str)) { iss.str(str); iss>>str; per.strName = str; while(iss>>str) { per.vecStr.push_back(str); } vecPer.push_back(per); per.vecStr.clear(); iss.clear(); } for(const auto &perInfo:vecPer) { oss << perInfo.strName<<" "; if(perInfo.vecStr.size()) { for(const auto &strNum:perInfo.vecStr) { oss<
<<" "; } } else { oss <<"DataWrong"; } ofs<
<

但是输出的时候,outfile.txt文件上是这样的:

这显然不是想要的结果。结果应该是一个人一行才对。

但这个答案的原因也很容易想到,一定是因为持续想oss中输出,而oss之前的串还在,所以就连在了一起,只需要每次输出之前清空oss即可。

可是C++Primer这部分并没有讲如何清空这个ostringstream的缓冲,显然不可能使用clear()。

所以我就想到了赋值,在每次输出之前先为其绑定一个string对象,然后再进行输出(因为我使用的模式是out,所以每次绑定都会对其进行清空)。

代码如下:

#include
#include
#include
#include
#include
using std::cout;using std::cin;using std::endl;using std::fstream;using std::istringstream;using std::ostringstream;using std::string;using std::vector;using std::begin;using std::end;struct PersonInfo{ string strName; vector
vecStr;};int main(){ vector
vecPer; PersonInfo per; fstream ifs("./infile.txt",fstream::in); fstream ofs("./outfile.txt",fstream::out); istringstream iss; ostringstream oss; string str; while(getline(ifs,str)) { iss.str(str); iss>>str; per.strName = str; while(iss>>str) { per.vecStr.push_back(str); } vecPer.push_back(per); per.vecStr.clear(); iss.clear(); } for(const auto &perInfo:vecPer) { oss.str(str); oss << perInfo.strName<<" "; if(perInfo.vecStr.size()) { for(const auto &strNum:perInfo.vecStr) { oss<
<<" "; } } else { oss <<"DataWrong"; } ofs<
<

运行之后,outfile.txt文件如图:

哈哈,看来果然是可行的。

转载于:https://www.cnblogs.com/FWFC/p/8603253.html

你可能感兴趣的文章
CYQ.Data 快速开发之UI(赋值、取值、绑定)原理
查看>>
使用路由器实现不同VLAN间通信_路由交换
查看>>
真我新格调 勇敢使梦想触手可及
查看>>
ExtJs 动态RadioGroup的子项 [ Ext | RadioGroup | items ]
查看>>
idea模板注释
查看>>
DHCP服务介绍
查看>>
Hibernate的数据删除,更改
查看>>
编程学习初体验(5. 如何自学编程)(2)
查看>>
思科ISR G1与ISR G1C的区别
查看>>
利用perl提取web配置文件中的域名对应的路径
查看>>
VMware虚拟化---集群高可用纵览
查看>>
Centos5上安装JRE和LUMAQQ
查看>>
Ping不通不代表主机不在线!
查看>>
SCCM2007安装部署指南
查看>>
关于监控工具的主动发起性能测试
查看>>
AngularJs $resource 高大上的数据交互
查看>>
Cisco基础实验回顾4--IP classless
查看>>
上接扩展GridView控件(6) - 响应行的单击事件和双击事件
查看>>
负载均衡实施 应该因地制宜
查看>>
非常好的BASH脚本编写教程
查看>>