软件工程第一次个人项目——词频统计by11061153柴泽华
一.预计工程设计时间
明确要求: 15min;
查阅资料: 1h;
学习C++基础知识与特性: 4-5h;
主函数编写及输入输出部分: 0.5h;
文件的遍历: 1h;
编写两种模式的词频统计函数: 1.5h;
单词排序部分: 0.5h;
程序调试与测试: 1-2h;
程序优化:2h;
预计总共时间:12-13h;
二.实际工程完成时间
明确要求: 15min;
查阅资料: 1.5h;
学习C++基础知识与特性: 7h;
主函数编写及输入输出部分: 0.5h;
文件的遍历: 0.5h;
编写两种模式的词频统计函数: 1h;
单词排序部分: 1h;
程序调试与测试: 2h;
程序优化:3h;
实际总共完成时间:17h
三.程序优化
由于是第一次使用vs2012,因此对它的操作还没有很熟悉。刚开始分析程序采样时,总是显示数据无法采样,后来上网查询原因后,的只是由于自己的测试用例太小了,因此找同学借了一个大小为10M左右的英文小说文件夹来测试。
文件夹截图如下所示:
性能分析报告:无任何警告或错误
总体上来说,程序的时间效率还是有些低,希望这次作业后能和老师和同学们讨论关于这道题时间复杂度最低的算法,互相促进,共同进步。
通过以上两张图,我们可以发现main函数的主要耗时是花费在WordCounter函数上了,占到了99.8%,而WordCounter函数中的绝大多数时间则是花费在了operator>>上,即大量的字符操作处理上。因此下一步的优化重点可以放在简化字符操作处理上面,现在暂时还没有想到更好的方法。
这次排序中用到的是<algorithm.h>下的sort函数,只要定义好了其中的比较规则cmp函数,就可以按照自己的意愿排序wordmap中的单词。存储单词及其个数时用到的是map关联容器,这种C++特有的数据结构大大的简化了插入操作,更新操作的实现,也使后续的排序工作方便了许多。
文件的遍历输入采用的方法是使用system函数输入命令行,这样就可以递归地得到某目录下的所有需要的文件。该命令行为
dir filepath*.txt filepath*.cs filepath*.cpp filepath*.h /b /s
其中filepath指代的是命令行中输入的目录。(切记一定要以\\结尾)
文件的输出则是使用的pair变量迭代器挨个取map中的元素进行打印。
四.测试用例
1.空文件夹进行边界测试
2.大容量文件夹,进行压力测试
3.多层文件夹嵌套测试
4.文件中存在特殊字符测试
5.简单模式下对形如File,file等字符串的个数统计与大小比较
6.复杂模式下所要求的比较,例如windows7,windows8,windows
7.空文件进行边界测试
8.支持读文件类型后缀名测试
9.字典序测试
10.不合法单词是否被统计测试
五.感悟与收获
这次词频统计程序作业是我第一次接触C++编程,还好有过C和Java的程序设计经验,因此学习的时候只是看了一下C++特有的数据结构和语法,然后就可以开始编程了。
这次作业带给我的最大感悟就是不要把计划想得太理想。因为在现实实现的过程中,你可能会遇到各种意想不到的突发情况,因此你在事先计划的时候,一定要留出一定的余量并且做好良好的心理准备。这次作业时写代码其实并不是最耗费时间的一项工作,最耗费时间的反而是完成代码后的debug和代码优化。我想这也正是软件工程课的目的,它并不是一门普通的程序设计课或算法课,他要教给我们的是编写软件所要经过的所有必备流程以及必备方法。只有了解了这些流程和方法,才能将我们编写的普通小程序升级为软件。
还有一点,就是要常常吸取别人好的想法。比如编写这次作业时,文件的遍历处理过程当然可以使用深度优先搜索或广度优先搜索来完成,但是,如果你使用一行命令行代码的话,你会发现这将大大减小你的编码难度以及减少你程序的运行时间。这种好想法可能你永远也不会想到,因此多多倾听别人的想法,必然是有着大大的益处。
软件工程第一次个人项目——词频统计by11061153柴泽华的更多相关文章
- 个人项目-词频统计(语言:C++)
词频统计 (个人项目) 要求 (1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率. 附加要求:读入一段文本文件,统计该文本文件中单词的频率. (2) ...
- 作业3-个人项目<词频统计>
上了一天的课,现在终于可以静下来更新我的博客了. 越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”. 词频统计 单词: 包含有4个或4个以上的字 ...
- 个人项目----词频统计WEB(部分功能)
需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...
- 结对项目— 词频统计2(语言C++)
结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...
- 结对项目— 词频统计(语言C++)
结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...
- task4:结对项目-词频统计
结对人:周楠 思路:利用TreeMap实现key字典序,然后输出到LinkedList,然后用Comparator,实现字典值从大到小排序,但是key实现值相同的key字典序的想出的实现方法,但是一直 ...
- HW—词频统计
第一次个人作业——词频统计 第一次做这种大作业,明显感觉陌生,各种规范和技能也是第一次使用,希望自己好运. 目录:一.基本要求 二.需求分析及时间估计 三.实现思路及过程 四.测试用例.时间性能分析及 ...
- USTC《现代软件工程》春季学期——第一次个人作业:词频统计
截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...
- C# 词频统计 东北师范大学 软件项目管理 第一次作业
一.作为杨老师的学生第一次听杨老师讲课,印象最深的就是:工程中所有步骤之间是乘法,如果任何一步为0,工程就做不出来了.以前所有老师讲到的都是不要太在乎结果,努力的过程很重要,但是这在软件工程中不合适了 ...
随机推荐
- QTP数据驱动之读取Excel数据
这个代码的原理是把Excel的数据当做数据库里的数据一样处理,可以对Excel用select来检索需要的数据,然后把数据以键值对的形式保存到oDict里,方便在用例层来调用 Class oDataDi ...
- LA 6047 Perfect Matching 字符串哈希
一开始我用的Trie+计数,但是不是计多了就是计少了,后来暴力暴过去的…… 看了别人的代码知道是字符串哈希,但是仍有几个地方不理解: 1.26^500溢出问题 2.没考虑哈希碰撞? 跪求指点! #in ...
- 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...
- Linux设备管理之权限倾斜——mem、proc、devfs、sysfs、udev(下)
linux发展第一阶段 01devfs(linux2.6之前) 02udev(用户空间) 03sysfs(linux2.6之后,描述设备属性) linux发展第二阶段 01sysfs+udev(ude ...
- struts1,struts2,springMVC终极对比
最近做项目用到了struts2,之前一直是用struts1和springMVC.感觉到了struts2从很大程度上和这两个还是有很大区别的,所以今天搜集了些资料,给他们做一下对比. Struts1官方 ...
- C/C++内存存储
#include <stdio.h> #include "string.h" #include "malloc.h" void Swap(int a ...
- NPlot开源画图类
一.net下的图表控件NPlot的基本用法 NPlot的基本用法 图表控件一直是很难找的,特别是免费又强大的.NPlot是一款非常难得的.Net平台下的图表控件,能做各种曲线图,柱状图,饼图,散 ...
- Android UI详解之Fragment加载
使用Fragment的原因: 1. Activity间的切换不流畅 2. 模块化Activity,方便做局部动画(有时为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragmen ...
- SELECT样式,兼容IE6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- codeforces 682C Alyona and the Tree DFS
这个题就是在dfs的过程中记录到根的前缀和,以及前缀和的最小值 #include <cstdio> #include <iostream> #include <ctime ...