实验6 流类库与I/O
- 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的更多相关文章
- C++流类库(11)
C++的流类库由几个进行I/O操作的基础类和几个支持特定种类的源和目标的I/O操作的类组成. 流类库的基础类 ios类是isrream类和ostream类的虚基类,用来提供对流进行格式化I/O操作和错 ...
- C++学习笔记55:流类库与输入输出
I/O流的概念及流类库的结构 程序与外界环境的信息交换 当程序与外界环境进行信息交换时,存在着两个对象:程序中的对象,文件对象. 流是一种抽象,负责在数据的生产者和数据的消费者之间建立联系,并管理数据 ...
- 流类库继承体系(IO流,文件流,串流)和 字符串流的基本操作
一.IO.流 数据的输入和输出(input/output简写为I/O) 对标准输入设备和标准输出设备的输入输出简称为标准I/O 对在外存磁盘上文件的输入输出简称为文件I/O 对内存中指定的字符串存储空 ...
- C++——流类库和输入/输出
前言 数据是怎么写道磁盘的? 代码里面我们一个读写调用似乎就能将数据从磁盘读写.仿佛代码是直接和磁盘打交道.以我们最常见的笔记本.或台式机的磁盘SATA盘为例,其受南桥上ATA控制器支配,这里面传输的 ...
- 【C++ 流类库与输入输出 】实验七
1. 基础练习 (1)教材习题 11-7 (2)教材习题 11-3 (3)教材习题 11-4 2. 应用练习 (1)已知有班级名单文件 list.txt(见实验 7 附件包).编写一个应用程序实现随机 ...
- Java第8次实验(IO流)
参考资料 本次作业参考文件 正则表达式参考资料 第1次实验 1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 参考文件:基础代码目录Student.jav ...
- I/O流的概念和流类库的结构
概念: 程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件. C++输入输出包含以下三个方面的内容: 1.对系统指定的标准设备的输入和输出.即从键盘输入数据,输出到 ...
- Java第09次实验(IO流)
参考资料 本次作业参考文件 正则表达式参考资料 第1次实验 0. 验证 使用FileOutputStream写字节.(二进制文件与文本文件.try...catch...finally注意事项) 使用D ...
- Java第09次实验(IO流)-实验报告
0. 字节流与二进制文件 使用DataOutputStream与FileOutputStream将Student对象写入二进制文件student.data 二进制文件与文本文件的区别 try...ca ...
随机推荐
- python之re模块和正则表达式
今天我们来谈谈python中模块的使用,在探讨模块前先来了解一下正则表达式的具体用法. 1.正则表达式 正则表达式就是匹配 字符串内容的一种规则.谈到正则就和字符串相关了,首先我们要知道什么是字符组. ...
- HDU4352 XHXJ's LIS(LIS 状压)
题意 题目链接 Sol 刚开始的思路是\(f[i][j]\)表示到第\(i\)位,LIS长度为\(j\)的方案. 然而发现根本不能转移,除非知道了之前的状态然后重新dp一遍.. 题解,,,挺暴力的把, ...
- linux中配置yum源
1.配置163或者阿里云yum源: 阿里云yum源地址:https://mirrors.aliyun.com/centos/6.9/os/x86_64/Packages/ 阿里云给出的解决办法:htt ...
- DB2数据库常用语句
1.快速清空大量数据表数据,但是还原不了 alter table rm_customer activate not logged initially with empty table2.大量导出表语句 ...
- C#之razor
学习的文章在这里:http://www.cnblogs.com/yang_sy/archive/2013/08/26/ASPNET_MVC_RAZOR_ENGINE.html 1.视图开始文件_Vie ...
- java Vamei快速教程07 包
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经写了一些Java程序.之前的每个Java程序都被保存为一个文件,比如Tes ...
- bit Byte KB MB GB TB 单位换算
1TB = 1024G 1G = 1024M 1M = 1024K 1K = 1024 byte 1 byte = 8 bit
- 2017.12.20 Java中的 IO/XML学习总结 File类详细
IO / XML 一.File类 1.定义/概念 Java是面向对象的语言,要想把数据存到文件中,就必须要有一个对象表示这个文件.File类的作用就是代表一个特定的文件或目录,并提供了若干方法对这些文 ...
- python_59_装饰器2
#匿名函数,无函数名 calc=lambda x:x*3 print(calc(3)) sum=lambda x,y,z:x+y+z print(sum(1,2,3)) ''' 高阶函数 a:把一个函 ...
- 启动tomcat的Cannot find ./catalina.sh 的问题
从终端进入tomcat的bin目录,然后执行startup.sh Cannot find bin/catalina.sh The file is absent or does not have exe ...