笔记: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. GreenPlum tidb 性能比较

    主要的需求 针对大体量表的OLAP统计查询,需要找到一个稳定,高性能的大数据数据库,具体使用 数据可以实时的写入和查询,并发的tps不是很高 建立数据仓库,模式上主要采用星星模型.雪花模型,或者宽表 ...

  2. 编写简单的button配合input实现上传文件操作

    <template> <button> 导入文件 <input type="file" @change="fileChange" ...

  3. [Unity移动端]真机调试

    一.Android Studio 1.log打印 打开AS,新建一个工程,点击左下角的Logcat,如下图,1是设备(支持模拟器,如果是真机的话,需要usb连接电脑,真机要是usb调试模式),2是包名 ...

  4. js延迟加载、js异步加载

    1.js延迟加载 (1)js延迟加载是js性能优化的一种方式 (2)作用:为了提高网页的加载速度 (3)原理:等网页加载完成之后再加载js文件 ··需要优化的原因:HTML元素是按照其在页面中出现的次 ...

  5. 服务器中VirtualBox子网访问

    本人常用的虚拟机软件是VirtualBox,由于笔记本性能,磁盘存储大下限制,以及VirtualBox客户机无法在多个设备间直接方便的使用等原因,我把几个虚拟的系统全部移动到便携式服务器中. 移动之后 ...

  6. SpringBoot整合RocketMQ案例实战

    一.概念 rocketMQ是一款典型的分布式架构下的中间件产品,使用异步通信方式和发布订阅的消息传输模型,具备异步通信的优势,系统拓扑简单,上下游耦合较弱,主要应用于异步解耦,流量削峰填谷等场景 二. ...

  7. TSCTF-J 2022 WP

    Re baby_xor 加密逻辑如上,密文动态调试,然后 Shift+E 导出密文[这样避免了手动获取] # encoding=utf-8 enc=[ 0x12, 0x00, 0x00, 0x00, ...

  8. 红黑树(map与unorder_map)B B+树

    红黑树(map) 这个里面有插入的几种方式:红黑树性质的理解 先说性质,1 每个节点要么红要么黑,2 一个节点为红色,左右两个孩子都是黑, 3 根节点是黑, 4 每个叶子(nil)节点都是黑色, 5 ...

  9. 音频和视频流最佳选择?SRT 协议解析及报文识别

    我们所知道 SRT 是由 Haivision 和 Wowza 开发的开源视频流协议.很多人会认为在不久的将来,它被是 RTMP 的替代品.因为 RTMP 协议安全性稍低,延迟相对较高 ,而相对于 SR ...

  10. java数组排序及查找方法

    前言 在上一篇文章中,壹哥给大家讲解了数组的扩容.缩容及拷贝方式.接下来在今天的文章中,会给大家讲解更重要的数组排序及查找方法.今天的内容会有点难,希望你不要因此而退缩,挺过这一关,你会向上突破的! ...