笔记: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. python读书笔记-网页制作

    socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下:  Socket 对象(内建)方法  Python Internet 模块:

  2. 记一次自定义管理工厂使用spring自动装载bean

    1.核心工厂配置类 @Componentpublic class HandlerContext { private Map<String, AbstractHandler> handler ...

  3. 关于UPD章节学习的一些感想

    课程看到了UDP, 首先了解UDP的原理模型. 服务端,首先是实例QUdpSocket,也就是UDP套接字,然后,需要绑定.绑定一个任意IP地址,分为IPV4和IPV6.自行选择课程中讲解时绑定的是I ...

  4. Java 面试手撕代码

    1. 判断括号有效性 public static boolean fun5(String str) { HashMap<Character, Character> hashMap = ne ...

  5. Python学习笔记--判断语句的延续

    if else语句 示例: 需要注意的是,if后面必须有条件,而else后面可以不需要判断条件 案例: 实现: if elif else 语句 多条件判断,if 和 elif 后面必须有条件,else ...

  6. 如何解决 Iterative 半监督训练 在 ASR 训练中难以落地的问题丨RTC Dev Meetup

    前言 「语音处理」是实时互动领域中非常重要的一个场景,在声网发起的「RTC Dev Meetup丨语音处理在实时互动领域的技术实践和应用」活动中,来自微软亚洲研究院.声网.数美科技的技术专家,围绕该话 ...

  7. P8112 符文破译

    题目描述 将字符串 \(T\) 拆成若干个子串,使这些子串为字符串 \(S\) 的前缀,要求拆分形成的子串数最小. 思路整理 实际上并不需要倒着枚举,也不需要线段树,更不需要 Z 函数. 如果你做过 ...

  8. 使用ASP.NET CORE SignalR实现APP扫描登录

    使用signalr实现APP扫码登录 1. 背景介绍 在移动化时代,web开发很多时候都会带着移动端开发,这个时候为了减少重复输入账号密码以及安全性,很多APP端都会提供一个扫码登录功能,web端生成 ...

  9. Maven 的仓库、周期和插件

    一.Maven 仓库 在 Maven 的世界中,任何一个依赖.插件或者项目构建的输出,都可以称为构建.Maven 在某个统一的位置存储所有项目的共享的构建,这个统一的位置,我们就称之为仓库.任何的构建 ...

  10. 大数据面试——HDFS

    一.Hadoop1.0 与 Hadoop2.0的区别