c++第六次实验
part 1 验证性实验
合并两个文件。虽说验证,但后两个实验均受该代码指导启发。
part 2 文末添加数据
1、代码
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
int main()
{
ofstream out("C:\\Users\\lenovo\\Desktop\\实验六\\实验六part1\\实验六part1\\3.txt",ios_base::app);
if (!out)
{
cout << "Fail to open." << endl;
return ;
}
out << endl;
out << "merge successfully";
out.close();
return ;
}
part 2
2、程序截图
3、知识点
①“打开一个与输出流相关的文件时,可以指定一个open_mode标志,实现一些特定模式。用 ‘ | ’组合多个。 ”本题需要在文件尾添加数据,即“ios_base::app”。
②路径写法注意双斜杠,为了与转义字符相区别。
Part 3
一、随机抽取
1、代码
#include<iostream>
#include<fstream>
#include<string>
#include<ctime>
#include<sstream>
#include<windows.h>
using namespace std;
string getdate();
int main()
{
string filename, newfilename;//f是已存在的名单文件,new是即将存随机抽取的文件
int n, i; ofstream out;
ifstream in; cout << "输入名单列表文件名:";
cin >> filename;
cout << "输入随机抽点人数:";
cin >> n;
cout << "随机抽点中···" << endl; newfilename = getdate().c_str();//新建文件命名 out.open(newfilename);
if (!out.is_open())
{
cout << "Fail to open." << endl;
return ;
} for (i = ; i <= n; i++)
{
in.open(filename);
if (!in.is_open())
{
cout << "Fail to open." << endl;
return ;
} srand((unsigned)time(NULL));
int N = rand() % ; string s;
stringstream ss;
ss << N;
ss >> s; char c;
int j=;
while (in.get(c))
{
if (c == '\n')
{
j++;
if (j == N)
{
in.get(c);
while (c != '\n')
{
out << c;
in.get(c);
}
out << endl;
break;
}
}
else
continue;
}
in.close();
Sleep();
}
out.close(); char c;
ifstream nfile(newfilename);
while (nfile.get(c))
cout << c;
nfile.close();
return ;
}
const int SIZE1 = ;
string getdate()
{
time_t time_seconds = time();
struct tm now_time;
localtime_s(&now_time, &time_seconds); // 使用了更安全的localtime_s()
char date[SIZE1];
strftime(date, SIZE1, "%Y%m%d", &now_time);
return (string(date));
}
part 3.1
2、程序截图
3、出现的一些问题
①查找相应标号的同学,最开始想得简单,是通过简单对比数字,后来发现学号里也有数字。(有点儿傻的过分了)后来纠正的一些方法不如数行数更简便,最终就由数行数来找对应的同学。
②输入流文件打开操作 在n次抽取循环的外面,导致in.get(c)是接着数的。例如:
我机智的发现应该把 打开list 和 打开20190611 两个操作都放循环里面,每次循环就可以重新打开重新数。我还特别机智的立即想到也要在里面关闭两个文件,结果只保留了最后一个抽取的情况。例如:
循环哪个地方每次都会清空内容。翻课本时惊现不久前的笔记,输出流中隐含指定的模式是ios_base::out,当使用该模式打开已存在的文件时,内容清空。解决可以用part 2中的追加模式。
我是只把list打开关闭操作放在循环内。
③每次随机数取的差不多。例如:
我猜是随机数取的系统时间精度不那么高,程序运行又很快。不知道对不对地 人为的 让它每次取随机数前延迟一阵子。用了Sleep函数,感觉嗯,慢的过分了。
最终结果就如代码 and 截图。
二、统计单词
1、代码
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
string filename;
char c; cout << "输入要统计的英文文本文件名:";
cin >> filename; int a = , b = , s = ;//a字符数 b单词数 c行数 ifstream in;
in.open(filename);
if (!in)
{
cout << "Fail to open." << endl;
return ;
} while (in.get(c))
{
if (c != '\n')
a++;
if (c == '\n')
s++;
if (c == ' ' || c == '\n' || c == '\t')
{
in.get(c);
a++;
if ((c >= 'a'&&c <= 'z') || (c >= 'A'&&c <= 'Z'))
{
b++;
}
}
}
cout << "字符数:" << a << endl;
cout << "单词数:" << b << endl;
cout << "行数:" << s << endl;
return ;
}
part 3.2
2、程序结果截图
3、一点说明
没有用getline等等,就全一个一个数的,一次性全数完。
总结
1、学流类库之前认为插入提取用<<或者>>就是刻板规定,而且学习之初形象理解认为 输出 大概用>>更形象,所以很多时候还会打反。在学习流类库的时候也混,怎么它就是输出流文件,不是往它里面打字cin吗/扶额/。尤其做完实验才有点儿理解,明白为什么cin后跟提取,cout后跟插入,也就是你提取资料是输入,你把资料筛选出的内容插入到新文件,又是输出。
2、做实验总会有做oj的错觉,我会不会少打了回车啊,好像落了句号啊.../叹气/。
3、程序错乱或者漏洞可以直接指出,谢谢。
后继更新。
回顾知识点的时候参考博客https://blog.csdn.net/w_linux/article/details/72793651
评价
1、https://www.cnblogs.com/q1831726125/p/11044621.html
2、https://www.cnblogs.com/yidaoyigexiaopenyou/p/11044639.html
3、https://www.cnblogs.com/cjj1/p/11043693.html
c++第六次实验的更多相关文章
- 201521123122 《java程序设计》 第六周实验总结
201521123122 <java程序设计>第六周实验总结 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想 ...
- 20135302魏静静——linux课程第六周实验及总结
linux课程第六周实验及总结 实验及学习总结 1.进程描述符task_struct数据结构 进程的作用: 将信号.进程间通信.内存管理和文件系统联系起来 操作系统的三大功能: 进程管理.内存管理.文 ...
- 第八周作业总结&第六次实验报告
实验六 Java异常 实验目的 理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法. 实验要求 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异常类 ...
- 201621123054 《Java程序设计》第六周实验总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 1.2 可选:使用常规方法总结其他上课内容. 2 ...
- 201621123044 《Java程序设计》第六周实验总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...
- 实验六 MapReduce实验:二次排序
实验指导: 6.1 实验目的基于MapReduce思想,编写SecondarySort程序. 6.2 实验要求要能理解MapReduce编程思想,会编写MapReduce版本二次排序程序,然后将其执行 ...
- 201621123008 《Java程序设计》第六周实验总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 2. 书面作业 1. clone方法 1.1 在 ...
- 201871010121-王方-《面向对象程序设计java》第十六周实验总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...
- 第六周&实验四
二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:radius表示圆的半径. 2.圆类Circle的方法成员: Circle():构造方法,将半径置0 Cir ...
随机推荐
- java中变量的分类
•按被声明的位置划分: –成员变量:方法外部.类的内部定义的变量 –局部变量:方法或语句块内部定义的变量 –注意:类外面(类对应的大括号外面)不能有变量的声明 •按所属的数据类型划分: ...
- 利用Perlin nosie 完成(PS 滤镜—— 分成云彩)
%%%% Cloud %%%% 利用perlin noise生成云彩 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image ...
- 解决编译warning:warning: ‘MeteringUnit::voltage_gain_’ will be initialized after [-Wreorder]
问题: 环境:ubuntu 12.04,g++版本4.6.3,编译目标文件时出现warnings: u1204@u1204-zhw:~/hwsvn/2sw/4prj_mips/UCP_rt5350/s ...
- ONVIF Device Manager v2.2.146
对接ONVIF使用软件,用于对接支持onvif协议的IPC厂家设置 http://download.csdn.net/detail/li_dabo/9761415
- Operating System-进程/线程内部通信-竞争条件(Race Conditions)
从本文开始介绍进程间的通信,进程间通信遇到的问题以及方式其实和线程之间通信是一致的,所以进程间通信的所有理论知识都可以用在线程上,接下来的系列文章都会以进程之间的通信为模版进行介绍,本文主要内容: 进 ...
- Linux不停往外发包
一台Linux这两天不停往外发包,造成外部无法访问. [root@ct-nat ~]# watch ifconfig-------------查看数据包新增情况 Every 2.0s: ifconfi ...
- navicat导入sql文件
Hello,大家好.Navicat是我们平时使用较多的一个数据库客户端工具,平时小天我主要是用来连接mysql的,使用的时候还是很方便的. 今天小天我就给大家分享一个Navicat如何导入导出sql文 ...
- nginx与apache 限制ip连接数和带宽方法
今天有个人问我,nginx怎么限制ip连接数,突然想不起来了,年龄大了,脑子不怎么好使了.还要看一下配置才想起了.那个人又问我,你测试过的吗?一下子把我问蒙了,我真没测试过了,也不知道启作用了没有. ...
- spring初始化顺序
首先,Spring bean的默认加载顺序是怎么控制的 工程中有2个bean,A和B,其中必须先初始化A再初始化B,但是没有depend-on或者Order等方式去保证,只不过恰好刚好这么运行着没出事 ...
- hdu 5600 N bulbs 想法+奇偶讨论
http://acm.hdu.edu.cn/showproblem.php?pid=5600 本文重在分析该题目的思路,代码极其短,但是想到这个题目的思路却是挺复杂的过程. 思路 自己拿到题目也想到了 ...