笔记:C++学习之旅---IO库

C++的输入输出分为三种:

(1)基于控制台的I/O

(2)基于文件的I/O

(3)基于字符串的I/O

         



练习8.4  编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中。
#include
<iostream>
#include
<vector>
#include
<string>
#include
<fstream>
using
namespace
std;
void
ReadFileToVec(
const
string
&
fileName
,
vector
<
string
> &
vec
)
{
            
ifstream
ifs(
fileName
);//从文件读取数据
            
if
(ifs)
            {
                        
string
buf;
                        
while
(getline(ifs, buf))
                               vec
.push_back(buf);
            }
}
int
main()
{
            
vector
<
string
> vec;
            
//ofstream fd;//向文件写入数据
            
///string message;
            
//fd.open("./book.txt");
            
//cout << "请输入一串字符存入book.txt(-1退出)" << endl;
            
//cin >> message;
            
//fd << message;
            ReadFileToVec(
"./book.txt"
, vec);
            
for
(
const
auto
&str : vec)
                        cout << str << endl;
            system(
"pause"
);
            
            
return
0;
}

使用istringstream
当我们的某些工作是对整行文本进行处理,而其他一些工作是处理行内的单个单词时,通常可以使用istringstream。

练习8.9 打印一个istringstream对象的内容
#include
<iostream>
#include
<sstream>
using
namespace
std;
istream
&func(
istream
&
is
)
{
            
string
buf;
            
while
(
is
>> buf)
            {
                        cout << buf << endl;
            }
            
is
.clear();
            
return
is
;
}
int
main()
{
            
istringstream
iss(
"hello"
);
            func(iss);

            
return
0;
}

练习8.10 编写程序,将来自一个文件中的行保存在一个vector<string>中,然后使用一个istringstream从vector读取数据元素,每次读取一个单词。
#include
<iostream>
#include
<vector>
#include
<string>
#include
<sstream>
#include
<fstream>
using
namespace
std;

int
main()
{

            
ofstream
out;
            out.open(
"./book.txt"
);
            
string
message;
            cout <<
"请从键盘输入一串字符\n"
;
            cin >>message;
            out << message;
            out.close();
            
ifstream
ifs(
"./book.txt"
);
            
if
(!ifs)
            {
                        cerr <<
"No Data?"
<< endl;
                        
return
-1;
            }
            
vector
<
string
> vecline;
            
string
line;
            
while
(getline(ifs, line))
                   vecline.push_back(line);

            
for
(
auto
&s : vecline)
            {
                        
istringstream
iss(s);
                        
string
word;
                        
while
(iss >> word)
                        {
                                    cout << word << endl;
                        }
            }
            ifs.close();
            
return
0;
}


使用ostringstream
    当我们逐步构造输出,希望最后一起打印时,ostringstream是很有用的。例如,对于上一节的例子,我们可能想逐个验证电话号码并改变其格式。如果所有号码都是有效地,我们希望输出一个新的文件,包含改变格式后的号码。对于那些无效的号码,我们不会将它们输出到新文件中,而是打印一条包含人名和无效号码的错误信息。


练习8.13 
重写本节的电话号码程序,从一个命名文件而非cin读取数据。

笔记:C++学习之旅---IO库的更多相关文章

  1. 【c++ Prime 学习笔记】第8章 IO库

    C++语言不直接处理输入输出,而是通过标准库中的一组类来处理IO 1.2节介绍的IO库: istream(输入流)类型,提供输入 ostream(输出流)类型,提供输出 cin,是istream对象, ...

  2. C++系统学习之八:IO库

    新的C++标准中有三分之二的内容都是描述标准库.接下来重点学习其中几种核心库设施,这些是应该熟练掌握的. 标准库的核心是很多容器类(顺序容器和关联容器等)和一簇泛型算法(该类算法通常在顺序容器一定范围 ...

  3. 笔记-JavaWeb学习之旅5

    CP30的演示 package cn.itcast.datasourcejdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import j ...

  4. python学习笔记——爬虫学习中的重要库urllib

    1 urllib概述 1.1 urllib库中的模块类型 urllib是python内置的http请求库 其提供了如下功能: (1)error 异常处理模块 (2)parse url解析模块 (3)r ...

  5. 笔记-JavaWeb学习之旅19

    Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即"不仅仅是SQL",是一项全新的数据库理念,泛指非关系型数据库 r ...

  6. 笔记-JavaWeb学习之旅18

    AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端操作后必须等待服务器端的响应, ...

  7. 笔记-JavaWeb学习之旅15

    Filter:过滤器 概念:当访问服务器的资源是,过滤器可以将请求拦截下来,完成一些特殊的功能 快速入门: 步骤: 定义一个类,实现接口Filter 复写方法 配置拦截路径 package com.d ...

  8. 笔记-JavaWeb学习之旅14

    JSTL:JavaServer Pages Tag Library JSP标准标签库 if标签 <%@ page import="java.util.ArrayList" % ...

  9. 笔记-JavaWeb学习之旅10

    Servlet server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就可以被浏览器(tomcat)识别) Ser ...

  10. 笔记-JavaWeb学习之旅13

    验证码案列 昨天晚上出现的500错误原因在于验证码没有获取到,获取验证码是应该获取的是共享域中的验证码,而我把获取值得键给写成了jsp中的键,而不是内存生成图片中,然后把图片上传到共享域中的键.这两个 ...

随机推荐

  1. webpack逆向之报错Cannot read properties of undefined (reading 'call')

    经典报错 记录一下: 1: 缺少模块    补上 2.主模块无法调用子模块   有可能网站用的数组形式的模块包,你用的是对象,调用方法就要改变. 改写过程中 用的是对象方式: 那么3号包调用的4号包 ...

  2. C Ⅷ

    数组  int number[100];   //这个数组可以放100个数 int x; int cnt = 0; double sum = 0; scanf("%d", & ...

  3. ABP vNext微服务架构详细教程——项目部署

    1. 基础配置 在之前的文章中,我们已经配置了Kubernetes集群并安装了管理工具Kubesphere,文章地址为:https://mp.weixin.qq.com/s/MgpdMv5A-fYxN ...

  4. 8.forEach的使用

    1 List<customer> list //一个类是customer的列表 2 3 /* for(int i = 0;i < list.size();i++){ 4 System ...

  5. MQ(部署模式)

    MQ部署模式 1.master-slave部署模式 1)shared filesystem Master-Slave部署方式 主要是通过共享存储目录来实现master和slave的热备,所有的Acti ...

  6. Android Studio Dolphin 稳定版正式发布

      作者 / Yuri Blaise, Product Manager, Android为了帮助开发者们更轻松地打造高质量应用,Android Studio 团队深入调研,为大家带来了最新稳定版 An ...

  7. curl解决乱码

    mb_convert_encoding($str, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5');

  8. var 和let const的区别

    var 是ES5语法,let,const是ES6语法,var存在变量提升. let const有块级作用域,var没有

  9. 《MySQL是怎样运行的》第一章小结

  10. Linux高并发服务器之Linux多线程开发

    本文源自C++高薪面试项目的学习笔记,主要记录Liunx多线程的学习,主要知识点是线程概述等基础概念以外,还有线程相关Liunx系统函数以及对应练手代码,除此之外还有线程同步问题的讲解以及实战多线程买 ...