实验六
1.(1)合并两个文件到新文件中。文件名均从键盘输入。 运行程序,结合运行结果及源码中注释,理解和体会文件I/O的方法。
(2)使用文件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; // 输入文件流对象 ofstream file; fin.open(filename1); // 将输入文件流对象fin与文件filename1建立关联 if (!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出 cerr << "fail to open file " << filename1 << endl; system("pause"); exit(0); } fout.open(newfilename); // 将输出文件流对象fout与文件newfilename建立关联 if (!fin.is_open()) { // 如果创建/打开文件失败,输出错误提示信息并退出 cerr << "fail to open file " << newfilename << endl; system("pause"); exit(0); } 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(0); } // 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中 while (fin.get(ch)) fout << ch; fin.close(); // 关闭文件输入流对象fin与文件filename2的关联 fout.close(); // 关闭文件输出流对象fout与文件newfilename的关联 file.open(newfilename, ios_base::app); file << endl << "merge successfully. "; system("pause"); return 0; }
2.1. 已知名单列表文件list.txt。编写一个应用程序,实现从名单中随机抽点n位同学(n由键盘输入),在屏幕上显 示结果,同时也将结果写入文本文件,文件名自动读取当天系统日期,如20190611.txt。
#include <iostream> #include <string> #include <cstdlib> #include<fstream> #include "utils.h" #include<ctime> using namespace std; int main() { string filename,newfilename; int n=1,k,c; newfilename = getCurrentDate(); fstream file; ofstream fileout(newfilename); cout<<"输入名单列表文件名:"; cin>>filename; cout<<"输入随机抽点人数:"; cin>>k; file.open(filename); char buffer[256]; int x[100],i=0; srand(time(NULL)); for(int j=0;j<k;j++){ x[j]=rand()%(83-1+1)+1; i++; } i=0; for(int q=0;q<k-1;q++) { for(int m=0;m<k-1-q;m++) { if(x[m]>x[m+1]) { c=x[m]; x[m]=x[m+1]; x[m+1]=c; } } } while(!file.eof()) { file.getline(buffer,256,'\n'); if(n==x[i]) { cout<<buffer<<endl; fileout<<buffer<<endl; i=i+1; } n=n+1; } file.close(); system("pause"); return 0; }
//这个头文件里包含了可用工具函数的声明 #include <string> using std::string; // 函数声明 // 返回当前系统时间,格式诸如20190607 string getCurrentDate();
#include "utils.h" #include <ctime> using std::string; const int SIZE = 20; // 函数功能描述:返回当前系统时间 // 参数描述:无参数 // 返回值描述:以string类型返回系统当前日期,格式诸如20190611 string getCurrentDate() { time_t time_seconds = time(0); struct tm now_time; localtime_s(&now_time, &time_seconds); // 使用了更安全的localtime_s() char date[SIZE]; strftime(date, SIZE, "%Y%m%d", &now_time); return (string(date)); }
3.编程统计英文文本文件中字符数(包括空格)、单词数、行数。文件名由键盘输入。
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; int main() { char a[100]; string newfilename; cout<<"输入要统计的英文文本文件名:"; cin>>newfilename; int n = 0,s=0,p=0,count=0,i=0; // 输出文件流对象 ifstream fin; // 输入文件流对象 ofstream file; fin.open(newfilename); // 将输入文件流对象fin与文件filename1建立关联 if (!fin.is_open()) { // 如果打开文件失败,则输出错误提示信息并退出 cerr << "fail to open file " << newfilename<< endl; system("pause"); exit(0); } char ch; // 从文件输入流对象fin中获取字符,并将其插入到文件输出流对象fout中 while (fin.get(ch)) { if(ch!='\n') n = n + 1; if (ch == '\n') s = s + 1; if (ch != ' '&&ch != ','&&ch != '\n') count += 1; else if ((ch == ' ' || ch == ',' || ch == '\n') && count != 0) { p = p + 1; count = 0; } } fin.close(); // 关闭文件输入流对象fin与文件filename1的关联 file.open(newfilename, ios_base::app);\ if(count==0) file<<endl<<"字符数:"<< n<<endl<<"单词数:"<<p<< endl<<"行数:"<<s+1<<endl; else file<<endl<<"字符数:"<< n<<endl<<"单词数:"<<p+1<< endl<<"行数:"<<s+1<<endl; system("pause"); return 0; }
1.我把验证性实验的第一题和第二题放在一起做了,这样做要先关闭文件输入流对象fin与文件filename1的关联,关闭文件输入流对象fin与文件filename2的关联,关闭文件输出流对象fout与文件newfilename的关联,这样代码file.open(newfilename, ios_base::app); file << endl << "merge successfully. "才有效果,否则是没有merge successfully在结尾的。
2.在第二个随机抽取实验中要先掌握行读取,然后再运用抽取随机数的方法抽五个不同随机数放入数组,然后从小到大排序。然后就按照下列算法即可输出五个随机行。
while(!file.eof()) { file.getline(buffer,256,'\n'); if(n==x[i]) { cout<<buffer<<endl; fileout<<buffer<<endl; i=i+1; } n=n+1; }
但是由于我能力有限,无法做到随机五个打乱顺序的输出。但是这五个随机数是随机取的只是我帮它排了一下顺序问题不大。
3.计算英文文本的字符数,行数,单词数,那题我觉得我对方法可能只对本题有用,但是我已经在我范围内尽可能改了(o_ _)ノ。
原文地址:https://www.cnblogs.com/jiyuanxiangzhouziying/p/11013226.html
- LDA(Linear Discriminant Analysis)算法介绍
- Express.js 4,Node.js,MongoDB REST API 简易教程
- 基于梯度下降算法求解线性回归
- 彩色图像高斯反向投影
- OpenCV中直方图反向投影算法详解与实现
- 基于一维级联快速膨胀与腐蚀算法
- mac下利用Breakpad的dump文件进行调试
- OpenCV3.2集成Android Studio2.2开发配置
- laravel中使用gulp打包发布前端部分
- Spring的编程式事务和声明式事务
- Java过滤器Filter的使用详解
- 基于积分图的二值图像膨胀算法实现
- Java监听器Listener的使用详解
- 图像各向异性滤波
- 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 数组属性和方法
- 女同事问狗哥什么是线程池的阻塞队列?
- BAT某厂数据分析终面面经
- 通过常见的业务掌握SQL高级功能
- 滴滴出行数据分析师面试经验
- 如何制作推论统计分析报告
- 全局唯一 ID 服务的分布式ID生成系统
- SpringBoot 国际化实现跨地区的多语言切换
- MySQL 死锁产生原因和解决方法
- 手把手教你ShardingSphere和Mybatis拦截器实现特殊字段动态切换加密
- Swagger3.0官方starter诞生,可以扔掉那些野生starter了
- Prometheus 入门教程(一):Prometheus 快速入门
- 开发|ShiroConfig实现基础拦截
- 推荐几个 VS Code 扩展、主题和字体
- 万字长文 | 这可能是东半球最保姆级的后台服务器开发学习路线
- Python|对多角星的绘制