• 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中日期格式转换各个字母代表含义

    G  Era 标志符  Text  AD  y  年  Year  1996; 96  M  年中的月份  Month  July; Jul; 07  w  年中的周数  Number  27  W  ...

  2. android-上下文菜单的创建 - 随心

    //Menu设置//覆盖两个方法onCreateOptionsMenu(Menu menu).onOptionsItemSelected(MenuItem Item)//onCreateOptions ...

  3. Mysql数据库插入时乱码问题解决

    我们在利用cmd的黑屏界面进行mysql数据的插入时往往会出现不能插入的情况,这个原因是因为我们系统虽然和服务器端即mysql的数据库采用的都是统一的utf8的编码,但是在传输的过程中会变成iso88 ...

  4. Samuraiwtf-的确是很好的渗透学习平台

    有人问我要渗透测试平台学习,我想到了Samurai ,记得里面带有很多的,这里来推广一下. Samurai Web 测试框架很多人说是live CD测试环境,但是现在似乎不是了,至少目前最新版的只有这 ...

  5. HDU3308 线段树区间合并

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 ,简单的线段树区间合并. 线段树的区间合并:一般是要求求最长连续区间,在PushUp()函数中实 ...

  6. ES6中set和map的区别

    Set ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. // 例一 var set = ne ...

  7. 比特币中P2PKH(pay-to-public-key-hash)的锁定脚本和解锁脚本

    脚本格式 P2PKH的锁定脚本为: OP_DUP OP_HASH160 PUSHDATA(<Cafe Public Key Hash>) OP_EQUALVERIFY OP_CHECKSI ...

  8. C语言exp()函数:e的次幂函数(以e为底的x次方值)

    头文件:#include <math.h> exp()用来计算以e 为底的x 次方值,即ex 值,然后将结果返回.其原型为:    double exp(double x); [返回值]返 ...

  9. 如何更改VirtualBox虚拟电脑内存大小

  10. 02-CSS基础与进阶-day13_2018-09-21-20-05-21

    css3动画 @keyframes 动画名 { 0% { } 100% { } } 元素执行动画 animation: 动画名 运动时间 运动曲线 01运动的汽车.html <!DOCTYPE ...