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++第六次实验的更多相关文章

  1. 201521123122 《java程序设计》 第六周实验总结

    201521123122 <java程序设计>第六周实验总结 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想 ...

  2. 20135302魏静静——linux课程第六周实验及总结

    linux课程第六周实验及总结 实验及学习总结 1.进程描述符task_struct数据结构 进程的作用: 将信号.进程间通信.内存管理和文件系统联系起来 操作系统的三大功能: 进程管理.内存管理.文 ...

  3. 第八周作业总结&第六次实验报告

    实验六 Java异常 实验目的 理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法. 实验要求 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异常类 ...

  4. 201621123054 《Java程序设计》第六周实验总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 1.2 可选:使用常规方法总结其他上课内容. 2 ...

  5. 201621123044 《Java程序设计》第六周实验总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...

  6. 实验六 MapReduce实验:二次排序

    实验指导: 6.1 实验目的基于MapReduce思想,编写SecondarySort程序. 6.2 实验要求要能理解MapReduce编程思想,会编写MapReduce版本二次排序程序,然后将其执行 ...

  7. 201621123008 《Java程序设计》第六周实验总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 2. 书面作业 1. clone方法 1.1 在 ...

  8. 201871010121-王方-《面向对象程序设计java》第十六周实验总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...

  9. 第六周&实验四

    二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:radius表示圆的半径. 2.圆类Circle的方法成员: Circle():构造方法,将半径置0 Cir ...

随机推荐

  1. js 跨域复习 window.name | window.domain | iframe | Jsonp

    引起跨域的原因: 浏览器的同源策略,但是当你要发送请求的时候,出于安全性问题,浏览器有严格的要求,必须协议,域名,端口都相同,这个就是同源策略. 影响:a通过js脚本向b发送ajax请求,不同源就会报 ...

  2. 将double型小数点后面多余的零去掉

    /** 函数功能:将数值小数点后面多余的零清空.* 参数描述:*     [in] aSource - 输入的源数值:*     [out] aDestination - 输出截取后的数值*     ...

  3. 关于C++多态的理解

    多态,即多种形态.对于具有继承关系的一类对象,子类表现出了父类的某些特性,但是表现的不一样,这就是多态的现实体现.例如动物可以发声,但是狗是旺旺,狗是动物的一种,但是表现了不同的叫的特点,这就是多态. ...

  4. Skype SILK vs. iLBC vs. Speex

    对比一下这三种VOIP语音算法的特点: 1 参数与特征 2 SILK性能 关于iLBC和Speex的性能可以参考以前写的文章. 3 关于VOIP一些观点(仅代表个人观点) 1)  Skype 辛苦三年 ...

  5. QT(4)信号与槽

    mainWidget.h #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #include <QPushBu ...

  6. spring IOC 注解@Required

    @Required注解适用于bean属性的setter方法,使用@Required的方法必须在xml中填充,负责报错 例如下面的例子中,student中的setAge和setName有@Require ...

  7. js函数篇

    1.闭包函数,作用:不污染全局变量,  定义:与外界隔离的独立作用域被称为闭包,使用函数实现该功能称为函数闭包: 写法: (function(){ function sayHello(){ conso ...

  8. css关于内外边距的详细解释

    贴图吧,图一眼明了. 无效果时候有 只有一个<div>啦啦啦</div> 只有padding时候有: padding详细设计时: 解释:padding是对内的,如padding ...

  9. 【转】Ruby on Rails中select使用方法

    在Ruby on Rails中真的有一堆Select helper可以用,我们经常容易混淆.常见的有三个..select, select_tag, collection_select(其余的什么sel ...

  10. spring--设置注入VS构造注入

    1.在传统的程序设计中,调用亲自创建被调用者的实例,即由程序控制“对象之间的依赖关系”,这种方式的耦合度比较高:控制反转就是将由程序控制的“对象间的依赖关系”转交给Ioc容器来进行控制,被调用者的实例 ...