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 ...
随机推荐
- js 跨域复习 window.name | window.domain | iframe | Jsonp
引起跨域的原因: 浏览器的同源策略,但是当你要发送请求的时候,出于安全性问题,浏览器有严格的要求,必须协议,域名,端口都相同,这个就是同源策略. 影响:a通过js脚本向b发送ajax请求,不同源就会报 ...
- 将double型小数点后面多余的零去掉
/** 函数功能:将数值小数点后面多余的零清空.* 参数描述:* [in] aSource - 输入的源数值:* [out] aDestination - 输出截取后的数值* ...
- 关于C++多态的理解
多态,即多种形态.对于具有继承关系的一类对象,子类表现出了父类的某些特性,但是表现的不一样,这就是多态的现实体现.例如动物可以发声,但是狗是旺旺,狗是动物的一种,但是表现了不同的叫的特点,这就是多态. ...
- Skype SILK vs. iLBC vs. Speex
对比一下这三种VOIP语音算法的特点: 1 参数与特征 2 SILK性能 关于iLBC和Speex的性能可以参考以前写的文章. 3 关于VOIP一些观点(仅代表个人观点) 1) Skype 辛苦三年 ...
- QT(4)信号与槽
mainWidget.h #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #include <QPushBu ...
- spring IOC 注解@Required
@Required注解适用于bean属性的setter方法,使用@Required的方法必须在xml中填充,负责报错 例如下面的例子中,student中的setAge和setName有@Require ...
- js函数篇
1.闭包函数,作用:不污染全局变量, 定义:与外界隔离的独立作用域被称为闭包,使用函数实现该功能称为函数闭包: 写法: (function(){ function sayHello(){ conso ...
- css关于内外边距的详细解释
贴图吧,图一眼明了. 无效果时候有 只有一个<div>啦啦啦</div> 只有padding时候有: padding详细设计时: 解释:padding是对内的,如padding ...
- 【转】Ruby on Rails中select使用方法
在Ruby on Rails中真的有一堆Select helper可以用,我们经常容易混淆.常见的有三个..select, select_tag, collection_select(其余的什么sel ...
- spring--设置注入VS构造注入
1.在传统的程序设计中,调用亲自创建被调用者的实例,即由程序控制“对象之间的依赖关系”,这种方式的耦合度比较高:控制反转就是将由程序控制的“对象间的依赖关系”转交给Ioc容器来进行控制,被调用者的实例 ...