第六次实验
1. 合并两个文件到新文件中。文件名均从键盘输入。
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; // 输入文件流对象 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的关联 ofstream file; file.open(newfilename, ios_base::app); file << endl << "merge successfully" << endl; file.close(); system("pause"); return 0; }
3.已知名单列表文件list.txt。编写一个应用程序,实现从名单中随机抽点n位同学(n由键盘输入),在屏幕上显 示结果,同时也将结果写入文本文件,文件名自动读取当天系统日期,如20190611.txt。
#include<iostream> #include<fstream> #include<string> #include<ctime> #include"utils.h" char s[83][100]; using namespace std; int main() { int n, i, j,a; string filename; ifstream file; ofstream fl; char ch; srand((unsigned)time(NULL)); cout << "输入名单列表文件名:"; cin >> filename; cout << "输入随机抽点人数:"; cin >> n; file.open(filename); for (i = 0; i < 83; i++) { for (j = 0; j < 100; j++) { ch = file.get(); s[i][j] = ch; if (ch == '\n') { break; } } } file.close(); fl.open(getCurrentDate()); for (i = 0; i < n; i++) { a = rand() % 83; cout << s[a]; fl << s[a]; } fl.close(); system("pause"); return 0; }
4.编程统计英文文本文件中字符数(包括空格)、单词数、行数。文件名由键盘输入。
#include<iostream> #include<fstream> #include<string> using namespace std; int main() { int i = 0, zifu = 0, danci = 0, hangshu = 1; char ch; char s[100]; string filename; ifstream file; cout << "输入要统计的英文文本文件名:"; cin >> filename; file.open(filename); while ((ch = file.get()) != EOF) { s[i] = ch; if (ch != '\n') zifu += 1; else if (ch == '\n') hangshu += 1; i++; } for (i = 0; i < 100; i++) { if (s[i] != ' '&&s[i] != ','&&s[i]!='.'&&s[i + 1] == ' ') danci += 1; else if (s[i] != ' '&&s[i] != '.'&&s[i] != ','&&s[i + 1] == '.') danci += 1; else if (s[i] != ','&&s[i] != ' '&&s[i]!='.'&&s[i + 1] == ',') danci += 1; } cout << "字符数:" << zifu << endl; cout << "单词数:" << danci << endl; cout << "行数:" << hangshu << endl; system("pause"); return 0; }
实验总结与体会:
1.通过本次实验,我初步掌握了输入流与输出流的使用,理解和体会了文件I/O的方法。
2.本次实验让我知道了如何读取系统时间,复习了随机数的使用。
3.在file.open()之后,不要忘了file.close()。
4.使用随机数时,一定要用srand()为rand()设置随机数种子,不然使用的只是伪随机数。