《C++ Primer》读书笔记第八章-2-文件输入输出 And string流
来源:互联网 发布:第三代火影 知乎 编辑:程序博客网 时间:2024/06/03 12:52
笔记会持续更新,有错误的地方欢迎指正,谢谢!
文件输入输出
头文件fstream定义了三个类型来支持文件IO:
- ifstream:从一个给定文件读取数据;
- ofstream:向一个给定文件写入数据;
- fstream:读写都行。
fstream特有:打开文件绑定流的open()、关闭绑定文件的close()、文件是否成功打开且尚未关闭的is_open()。
因为fstream是继承自iostream的,所以它拥有iostream所有的行为,而且它还定义了一些新的成员来管理与流关联的文件。下面我们不会介绍~
string流
使用istringstream
例子:整理通讯录
事情是这样的,我们有一个通讯录,列出了人名和手机号码,某些人的手机号码可能有多个,像下面这个样子:
爸爸 13525684953
孙子 13624586352 15632459865
先定义一个结构来描述数据(人名和手机号码):
struct PersonInfo{ string name;//人名 vector<string> phones;//此人名可能对应多个号码};
先创建一个装PersonInfo类型对象的vector容器,再在一个循环中处理输入数据,每个循环读取一条记录(此记录有一个人名和此人的若干电话号码),先提取出一个人名,再提取出若干电话号码:
string line, word;vector<PersonInfo> people;while(getline(cin, line))//一次循环输入一行数据到line{ PersonInfo info;//创建一个PersonInfo类的对象 istringstream record(line); //将 记录record 绑定到 刚读入的那行数据 record >> info.name; //从记录record中读取名字到 info.name while(record >> word) //从记录record中读取号码到 word { info.phones.push_back(word);//将word压入到 info.phones中 } people.push_back(info); //把这个人的信息info装进通讯录}
这个小程序很棒,实现了 从一行行的字符串 转换为 人名和其电话号码分离的通讯录 的功能,不理解的地方多看看。
使用ostringstream
现在我们把刚刚构建好的通讯录输出,因为我们不希望输出号码有错误的人。所以,对于每一个人来说,我们要验证他所有的号码都有效才可以输出。于是,我们就想到先把输出内容写入到一个内存ostringstream中:
for(const auto &entry : people) //遍历。entry是people的引用。{ ostingstream goodNums, badNums; //每步循环创建这对 对象,用于装正确、错误的情况。 for(const auto &nums : entry.phones)//循环此人的全部电话号码 { if(!valid(nums)) //如果号码不合法(我们假定有这个valid函数) { badNums << " " << nums; } else { goodNums << " " << nums; } } if(badNums.str().empty()) //没错误号码,就输出此人名字和其全部号码。 { os << entry.name << " " << goodNums.str() << endl; } else//有一个或以上的错误号码,就输出此人名字和错误的号码。 { cerr << "有错误号码" << entry.name << badNums.str() << endl; }}
阅读全文
0 0
- 《C++ Primer》读书笔记第八章-2-文件输入输出 And string流
- 【C++ Primer】第八章 文件的输入输出
- 《C++ Primer》读书笔记-第八章 03 string流
- C++Primer读书笔记(第八章)
- 《C++ Primer》读书笔记-第八章 02 文件IO
- C++primer 第八章
- c++primer 第八章
- C primer plus 第八章 练习2:
- C primer plus 第八章 字符输入输出与输入验证 编程练习 个人答案
- Understanding and using c pointers 第八章读书笔记
- C++ Primer 读书笔记 – 第八章
- C++ Primer 读书笔记 – 第八章
- C++ Primer 读书笔记 – 第八章
- 【足迹C++primer】22、文件输入输出
- C++primer习题第八章
- C++Primer 读书笔记 第2章 浏览
- C++primer:string流
- C++Primer Plus U4读书笔记 vector array string + primer
- jdk 1.8 hashmap resize 源码阅读
- Wheel组的作用
- js中几种实用的跨域方法原理详解
- 使用Windows批处理和WMI设置Python的环境变量
- PHP开发工程师笔试题。五、八、十三、十五求指教
- 《C++ Primer》读书笔记第八章-2-文件输入输出 And string流
- Unity 制作指南针
- 【前端知识点】node.js的特点通俗解读面试必备-单线程高并发、异步io、跨平台
- ioS 消除navigationbar下方的阴影
- Change Font size when plotting using Python
- “Parameter estimation for text analysis ”翻译
- 给nvidia显卡增加风扇速度控制的选项
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 我很失败