实验6 流类库与I/O
时间:2019-06-16
本文章向大家介绍实验6 流类库与I/O,主要包括实验6 流类库与I/O使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- Part2 基础练习
使用文件I/O流,以文本方式打开Part1中合并后的文件,在文件最后一行添加字符"merge successfully. "
1 // 合并两个文件内容到一个新文件中。 2 // 文件名均从键盘输入 3 4 #include <iostream> 5 #include <fstream> 6 #include <string> 7 #include <cstdlib> 8 using namespace std; 9 10 int main() { 11 string filename1, filename2, newfilename; 12 13 cout << "输入要合并的两个文件名: " ; 14 cin >> filename1 >> filename2; 15 cout << "输入合并后新文件名: " ; 16 cin >> newfilename; 17 18 ofstream fout; // 输出文件流对象 19 ifstream fin; // 输入文件流对象 20 21 22 fin.open(filename1); // 将输入文件流对象fin与文件filename1建立关联 23 if(!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出 24 cerr << "fail to open file " << filename1 << endl; 25 system("pause"); 26 exit(0); 27 } 28 29 fout.open(newfilename); // 将输出文件流对象fout与文件newfilename建立关联 30 if(!fin.is_open()) { // 如果创建/打开文件失败,输出错误提示信息并退出 31 cerr << "fail to open file " << newfilename << endl; 32 system("pause"); 33 exit(0); 34 } 35 36 char ch; 37 38 // 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中 39 while(fin.get(ch)) 40 fout << ch; 41 42 fin.close(); // 关闭文件输入流对象fin与文件filename1的关联 43 44 fout << endl; // 向文件输出流对象fout中插入换行 45 46 47 fin.open(filename2); // 将输入文件流对象fin与文件filename2建立关联 48 if(!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出 49 cerr << "fail to open file " << filename2 << endl; 50 system("pause"); 51 exit(0); 52 } 53 54 // 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中 55 while(fin.get(ch)) 56 fout << ch; 57 58 fin.close(); // 关闭文件输入流对象fin与文件filename2的关联 59 fout << endl; 60 fout.close(); // 关闭文件输出流对象fout与文件newfilename的关联 61 62 63 ofstream out; 64 out.open("3.txt",ios::app); 65 out<<"merge successfully."; 66 out.close(); 67 68 system("pause"); 69 return 0; 70 }
运行结果:
- Part3 应用编程实践
1、已知名单列表文件list.txt。编写一个应用程序,实现从名单中随机抽点n位同学(n由键盘输入),在屏幕上显 示结果,同时也将结果写入文本文件,文件名自动读取当天系统日期,如20190611.txt。
1 #include <iostream> 2 #include <string> 3 #include "utils.h" 4 #include <fstream> 5 #include <cstdlib> 6 #include <ctime> 7 #include <vector> 8 using namespace std; 9 10 int main() { 11 string filename,filename1; 12 int n,i,x; 13 filename = getCurrentDate(); 14 filename+=".txt"; 15 cout << "输入名单列表文件名: " ; 16 cin >> filename1; 17 cout << "输入随机抽点人数: " ; 18 cin >> n; 19 cout << "随机抽点中…… "<<endl; 20 21 ofstream fout; 22 ifstream fin; 23 24 fin.open(filename1); 25 if(!fin.is_open()) { 26 cerr << "fail to open file " << filename1 << endl; 27 exit(0); 28 } 29 30 vector<string>infor; 31 string t; 32 while(!fin.eof()) 33 {getline(fin,t); 34 infor.push_back(t);} 35 36 37 fout.open(filename); 38 if(!fin.is_open()) { 39 cerr << "fail to open file " << filename << endl; 40 exit(0); 41 } 42 43 srand((int) time (NULL)); 44 for(i=1;i<=n;i++) 45 {x=rand()%(83-1+1)+1; 46 fout<<infor[x]<<endl; 47 cout<<infor[x]<<endl; 48 } 49 50 fin.close(); 51 fout.close(); 52 53 return 0; 54 }
1 #include "utils.h" 2 #include <ctime> 3 using std::string; 4 5 const int SIZE = 20; 6 7 // 函数功能描述:返回当前系统日期 8 // 参数描述:无参数 9 // 返回值描述:以string类型返回系统当前日期,格式诸如20190611 10 string getCurrentDate() { 11 12 time_t now = time(0); // 获取当前系统日历时间 13 14 struct tm *local_time = localtime(&now); // 把系统日历时间转换为当地时间 15 16 char date[SIZE]; 17 18 strftime(date, SIZE, "%Y%m%d", local_time); 19 20 return (string(date)); 21 }
1 //这个头文件里包含了可用工具函数的声明 2 3 #include <string> 4 using std::string; 5 6 // 函数声明 7 // 返回当前系统时间,格式诸如20190611 8 string getCurrentDate();
我没保存这份名单txt的截图,因为我是霉粉,不忍心删掉这张图片(。•́︿•̀。)
运行结果:
2、编程统计英文文本文件中字符数(包括空格)、单词数、行数。文件名由键盘输入。
1 #include <iostream> 2 #include <fstream> 3 #include <string> 4 #include <cstdlib> 5 using namespace std; 6 7 int main() { 8 string filename; 9 10 cout << "输入要统计的英文文本文件名: "; 11 cin >> filename; 12 13 ifstream fin; 14 15 fin.open(filename); 16 if(!fin.is_open()) { 17 cerr << "fail to open file " << filename << endl; 18 exit(0); 19 } 20 21 char ch; 22 int charn=0,wordn=0,linen=0,last=0; 23 while(fin.get(ch)) 24 {charn++; 25 if(ch=='\n') 26 {linen++;charn--;} 27 if(ch==' '||ch=='\t'||ch=='\n') 28 last=0; 29 else if(last==0) 30 {wordn++;last=1;} 31 } 32 if(ch!='\n') 33 linen++; 34 35 cout<<"字符数:"<<charn<<endl 36 <<"单词数:"<<wordn<<endl 37 <<"行数:"<<linen<<endl; 38 39 fin.close(); 40 return 0; 41 } 42
运行结果:
实验总结:
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
原文地址:https://www.cnblogs.com/jyf13/p/11005679.html
- CoreOS 已废弃组件
- Docker Compose version 3 使用详解
- Virtualbox 安装 Alpine Linux
- LinuxKit 使用
- Docker 实践遇到的问题(持续更新)
- GitHub Pages 常见问题
- SpyDealer深度剖析:一个广泛针对中国手机APP进行信息窃取的恶意软件
- Docker + Drone CI/CD 实践
- Petya及Notpetya的核心差异分析
- macOS aria2 命令行使用详解
- 看我如何破解OpenNMS哈希密码?
- Fish Shell 命令补全
- 2017年最适用于WIFI HACK的无线网卡推荐
- OpenSSL 加密解密文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- codeforces 1328D(思维)
- codeforces 1283D(BFS)
- codeforces 1213D2(贪心+思维)
- codeforces 1426E(贪心)
- codeforces 1374E1(贪心+优先队列)
- codeforces 455A(dp)
- codeforces 1296E1(贪心+思维)
- codeforces 1216E1(数学+暴力)
- JDBC基础入门使用
- codeforces 1353E(dp)
- codeforces 1396A(构造)
- codeforces 1335E1+E2(思维)
- JSP开发基础入门学习1
- codeforces 1407C(数学+交互题)
- codeforces 1420C1