• Part2 基础练习

使用文件I/O流,以文本方式打开Part1中合并后的文件,在文件最后一行添加字符"merge successfully. "

 // 合并两个文件内容到一个新文件中。
// 文件名均从键盘输入 #include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std; int main() {
string filename1, filename2, newfilename; cout << "输入要合并的两个文件名: " ;
cin >> filename1 >> filename2;
cout << "输入合并后新文件名: " ;
cin >> newfilename; ofstream fout; // 输出文件流对象
ifstream fin; // 输入文件流对象 fin.open(filename1); // 将输入文件流对象fin与文件filename1建立关联
if(!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出
cerr << "fail to open file " << filename1 << endl;
system("pause");
exit();
} fout.open(newfilename); // 将输出文件流对象fout与文件newfilename建立关联
if(!fin.is_open()) { // 如果创建/打开文件失败,输出错误提示信息并退出
cerr << "fail to open file " << newfilename << endl;
system("pause");
exit();
} char ch; // 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中
while(fin.get(ch))
fout << ch; fin.close(); // 关闭文件输入流对象fin与文件filename1的关联 fout << endl; // 向文件输出流对象fout中插入换行 fin.open(filename2); // 将输入文件流对象fin与文件filename2建立关联
if(!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出
cerr << "fail to open file " << filename2 << endl;
system("pause");
exit();
} // 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中
while(fin.get(ch))
fout << ch; fin.close(); // 关闭文件输入流对象fin与文件filename2的关联
fout << endl;
fout.close(); // 关闭文件输出流对象fout与文件newfilename的关联 ofstream out;
out.open("3.txt",ios::app);
out<<"merge successfully.";
out.close(); system("pause");
return ;
}

main

运行结果:

  •  Part3 应用编程实践

1、已知名单列表文件list.txt。编写一个应用程序,实现从名单中随机抽点n位同学(n由键盘输入),在屏幕上显 示结果,同时也将结果写入文本文件,文件名自动读取当天系统日期,如20190611.txt。

 #include <iostream>
#include <string>
#include "utils.h"
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std; int main() {
string filename,filename1;
int n,i,x;
filename = getCurrentDate();
filename+=".txt";
cout << "输入名单列表文件名: " ;
cin >> filename1;
cout << "输入随机抽点人数: " ;
cin >> n;
cout << "随机抽点中…… "<<endl; ofstream fout;
ifstream fin; fin.open(filename1);
if(!fin.is_open()) {
cerr << "fail to open file " << filename1 << endl;
exit();
} vector<string>infor;
string t;
while(!fin.eof())
{getline(fin,t);
infor.push_back(t);} fout.open(filename);
if(!fin.is_open()) {
cerr << "fail to open file " << filename << endl;
exit();
} srand((int) time (NULL));
for(i=;i<=n;i++)
{x=rand()%(-+)+;
fout<<infor[x]<<endl;
cout<<infor[x]<<endl;
} fin.close();
fout.close(); return ;
}

main

 #include "utils.h"
#include <ctime>
using std::string; const int SIZE = ; // 函数功能描述:返回当前系统日期
// 参数描述:无参数
// 返回值描述:以string类型返回系统当前日期,格式诸如20190611
string getCurrentDate() { time_t now = time(); // 获取当前系统日历时间 struct tm *local_time = localtime(&now); // 把系统日历时间转换为当地时间 char date[SIZE]; strftime(date, SIZE, "%Y%m%d", local_time); return (string(date));
}

utils.cpp

 //这个头文件里包含了可用工具函数的声明 

 #include <string>
using std::string; // 函数声明
// 返回当前系统时间,格式诸如20190611
string getCurrentDate();

utils.h

   我没保存这份名单txt的截图,因为我是霉粉,不忍心删掉这张图片(。•́︿•̀。)

运行结果:

2、编程统计英文文本文件中字符数(包括空格)、单词数、行数。文件名由键盘输入。

 #include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std; int main() {
string filename; cout << "输入要统计的英文文本文件名: ";
cin >> filename; ifstream fin; fin.open(filename);
if(!fin.is_open()) {
cerr << "fail to open file " << filename << endl;
exit();
} char ch;
int charn=,wordn=,linen=,last=;
while(fin.get(ch))
{charn++;
if(ch=='\n')
{linen++;charn--;}
if(ch==' '||ch=='\t'||ch=='\n')
last=;
else if(last==)
{wordn++;last=;}
}
if(ch!='\n')
linen++; cout<<"字符数:"<<charn<<endl
<<"单词数:"<<wordn<<endl
<<"行数:"<<linen<<endl; fin.close();
return ;
}

main

运行结果:

实验总结:

1、感谢大佬分享的链接,让我在Part3的第一题,能够顺利做出来

循环条件中,判定,只要文件流没有到达末尾,循环始终进行,并且将每一行的数据赋给一个vector

我再分享一次(#^.^#)   https://blog.csdn.net/isbnhao/article/details/8055359

2、随机函数是参考了以前C语言老师讲滴版本

3、巩固了使用文件流类实现文件I/O的步骤和方法,以及常用的一些成员函数或普通函数

评论:

1、https://www.cnblogs.com/ggwdcs/p/11030950.html

2、https://www.cnblogs.com/wyf-blogs/p/11029005.html

3、https://www.cnblogs.com/csc13813017371/p/11027397.html

实验6 流类库与I/O的更多相关文章

  1. C++流类库(11)

    C++的流类库由几个进行I/O操作的基础类和几个支持特定种类的源和目标的I/O操作的类组成. 流类库的基础类 ios类是isrream类和ostream类的虚基类,用来提供对流进行格式化I/O操作和错 ...

  2. C++学习笔记55:流类库与输入输出

    I/O流的概念及流类库的结构 程序与外界环境的信息交换 当程序与外界环境进行信息交换时,存在着两个对象:程序中的对象,文件对象. 流是一种抽象,负责在数据的生产者和数据的消费者之间建立联系,并管理数据 ...

  3. 流类库继承体系(IO流,文件流,串流)和 字符串流的基本操作

    一.IO.流 数据的输入和输出(input/output简写为I/O) 对标准输入设备和标准输出设备的输入输出简称为标准I/O 对在外存磁盘上文件的输入输出简称为文件I/O 对内存中指定的字符串存储空 ...

  4. C++——流类库和输入/输出

    前言 数据是怎么写道磁盘的? 代码里面我们一个读写调用似乎就能将数据从磁盘读写.仿佛代码是直接和磁盘打交道.以我们最常见的笔记本.或台式机的磁盘SATA盘为例,其受南桥上ATA控制器支配,这里面传输的 ...

  5. 【C++ 流类库与输入输出 】实验七

    1. 基础练习 (1)教材习题 11-7 (2)教材习题 11-3 (3)教材习题 11-4 2. 应用练习 (1)已知有班级名单文件 list.txt(见实验 7 附件包).编写一个应用程序实现随机 ...

  6. Java第8次实验(IO流)

    参考资料 本次作业参考文件 正则表达式参考资料 第1次实验 1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 参考文件:基础代码目录Student.jav ...

  7. I/O流的概念和流类库的结构

    概念: 程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件. C++输入输出包含以下三个方面的内容: 1.对系统指定的标准设备的输入和输出.即从键盘输入数据,输出到 ...

  8. Java第09次实验(IO流)

    参考资料 本次作业参考文件 正则表达式参考资料 第1次实验 0. 验证 使用FileOutputStream写字节.(二进制文件与文本文件.try...catch...finally注意事项) 使用D ...

  9. Java第09次实验(IO流)-实验报告

    0. 字节流与二进制文件 使用DataOutputStream与FileOutputStream将Student对象写入二进制文件student.data 二进制文件与文本文件的区别 try...ca ...

随机推荐

  1. Java爬虫初体验

    年关将近,工作上该完成的都差不多了,上午闲着就接触学习了一下爬虫,抽空还把正则表达式复习了,Java的Regex和JS上还是有区别的,JS上的"\w"Java得写成"\\ ...

  2. vue中background-image图片路径问题

    按照以往在css文件中写background:url('图片路径'),完成后加载竟然显示出错,起初以为路径不对,检查了几遍,仍然没有问题.最后百度找答案,发现不少同行都遇到过这种问题,遂记录下自己所采 ...

  3. 分布式缓存memcached介绍,win7环境安装,常用命令set,get,delete,stats, java访问

    一.memcached是什么? 二.memcached不互相通信的分布式 三.安装步骤 四.本文介绍的命令主要包括: 存入命令(Storage commands) 取回命令(Retrieval com ...

  4. DataGridView控件使用大全

    转自:http://www.cnblogs.com/xiaofengfeng/archive/2011/04/16/2018504.html DataGridView控件 DataGridView是用 ...

  5. IIS7.5配置自动添加www 及 限制通过IP访问web

    IIS7.5配置自动添加www 方法 新建一个站点2(主机名为不带www的站点),将其重定向至带www的URL即可. 注意以下几点 站点2不可与站点1的路径一致,否则会导致站点1也会添加同样的重定向, ...

  6. Win 10 Google 云端硬盘 网页证书问题导致无法登录解决办法

    操作方法 按照图示,将以下3项勾去并确定. 效果 设置以后,可成功访问:

  7. win10 U盘重装

    之前用一键重装软件装系统后,D盘留下了一个PE系统,后来我装双系统装好Ubuntu后,打开Ubuntu结果出现了那个PE系统,最后没办法只好重装win10. 重装系统主要有三种方法,参见:链接 因为电 ...

  8. 用户在设置密码时,提醒请输入半角字符(vue+element+valid)

    要保证callback()只有一个出口 rules:{ newPassword: [{validator:(rule,newPassword,callback)=>{ var all = fal ...

  9. python 多进程简单调用

    python 多进程简 #!/usr/bin/env python #-*- coding:utf-8 -*- # author:leo # datetime:2019/5/28 10:03 # so ...

  10. python之道12

    整理今天笔记,课上代码最少敲3遍. 用列表推导式做下列小题 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 l = ['wusir', 'laonanhai', 'aa', 'b', 'tai ...