Individual Project - Word frequency program——12061154Joy
http://www.cnblogs.com/jiel/p/3978727.html
项目时间估计
理解项目要求: 1h
构建项目逻辑: 1h
查阅相关资料: 1h
编写&调试程序: 6h
样例测试&功能完善: 2h
项目效率分析: 1h
项目优化: 2h
总结&提交: 2h
项目实际完成时间
实际完成时间三天,真是佩服自己的效率,题目意思不难理解,实现也起来也不难,各个部分的算法想好应该怎么实现,但是对于完全陌生的C#只能写一写就去Google一下相关的写法,查找资料用了相当长的时间。写完代码以后Debug没有用多长时间,有一个小错误很快就发现了。但是后来题目关于排序的意思理解有点问题,又重新查资料修改。然后再测试样例上的时间比较多,测试数据按照我对题目的理解应该是能输出正确结果的。
开发过程
开发过程其实不能算充满艰辛,因为以前面向对象课的时候写过类似的统计词频的题,知道大概的算法实现,但因为对C#语言的不了解,查相关函数及其用法时用了相当长的时间,不过对于正在拼命学英语的我来说多读读英文文档还是比较有好处的。
关于算法实现,我是用一个dictionary来存储单词,Dictionary<string,<int,string>>(StringComparer.OrdinalIgnoreCase),第一个string是用于判断符合条件的word是否已经出现过,第二个string是用来存放出现过的单词的最小ASCII码的单词。
整个过程就是在指定目录中寻找后缀满足条件(.txt,.cpp,.h,.cs)的文件,读取内容,将内容按规则分割成字符串数组parts,遍历parts,若满足<word>条件(简单模式)、<word word>(-e2模式)或<word word word>(-e3模式)就按规则存入字典dictionary中。全部读取完后,按照模式方式输出在当前exe所在目录下的12061154Joy.txt中。
性能分析
跑了Visual Studio2012 的安装包,大概5.7G,不过只有5858个样本还跑了90+s,真是慢的可以;不过后来跑就只有30+s了,我也不知道是怎么回事。
由图可以看出,独占样本较多的函数主要是Match和Split函数,因为程序运行过程中不断的在分割文件内容和匹配word。
函数非独占样本比例和独占样本比例:
函数使用率细节:
测试样例
1,"123file file123 file File FiLe"
这个“123file”并不符合<word>的要求,但是刚开始我的正则表达式竟然匹配成功了。因为表达式里没有指出三个字母是在word开头,所以出现了错误。
这里的“file”单词单个输出应该是“FiLe”,因为它的ASCII码最小。
期望&输出结果:
2,“In your pattern you group elements with round brackets”
检测“-e2”模式下两个word组合在一起
期望&输出结果:
3,“In your-=pattern you@ ^&group eleme$nts with round brackets”
两或三个word匹配时的限制条件:只能有一个空格符
期望&输出结果:
4,“
txt file
tXt File
tXT file
TxT fiLe
How Are You?
how old are you
hOw oLd aRe yOu
HoW arE YOu?
”
除大小写外相同的单词之间的匹配和排序问题,所有排序都是按照ASCII码顺序排列
期望&输出结果:
5,测试空目录
输出空白txt
期望&输出结果:
6,测试不存在的目录
控制台输出“Directory is not exsiting!!”
7,测试错误模式指令
控制台输出“Command is wrong!!Please check again!”
8,测试.txt & .cpp & .h & .cs 文件中夹杂了其他类型的文件
只输出了这四种文件里面的内容
9,“
E:\Let's study!\创意论文\2013
E:\Let's study!\计算机操作\网页制作
E:\Let's study!\编译原理\编译PPT
E:\Let's study!\计算机操作\网页制作\网页\Templates
E:\Let's study!\编译原理
E:\Let's study!\计算机操作\ppt\PPT音影素材
”
对非字母数字的符号及中文的检测
期望&输出结果:
9,“
how are you
how Are you
fine thank you and YOU
fine Thank you And you
fine thank YOU and
”
小伙伴的测试样例,还好是对的
期望&输出结果:
10,“
between a letter followed bya point comma.
Still it should be included in the result.
”
期望&输出结果:
我学到的
这次的作业又让我被学会了一门语言——C#,和学习面向对象课的时候一样,也是被学会了Java。这次还好有的选择,对于指针的恐惧让我选择了和Java相似的C#,还好语言之间有非常多的相似性,但是一些函数的用法比如Dictionary,list.Sort实在是不甚熟悉,只有每碰到一个问题时就Google一下,也让我在读文档的过程中学到了不少的东西。
结果固然重要,但是学习的过程更重要,在学习函数用法时了解了许多,读下来那么多词的英文文档我都佩服死自己了;熬夜码代码却乐在其中,有些东西不只因为是任务才努力去完成,主要是希望能够收获一些,让自己前进一些。What I have learnt in the process is much greater than just getting the result.
Individual Project - Word frequency program——12061154Joy的更多相关文章
- Individual Project - Word frequency program by HJB
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;us ...
- Limeng:Individual Project: Word frequency program -BUAA Advanced Software Engineering
11061190-李孟 Implement a console application to tally the frequency of words under a directory (2 mod ...
- Individual Project - Word frequency program - Multi Thread And Optimization
作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...
- SoftwareEngineering Individual Project - Word frequency program
说实话前面c#实在没怎么学过.这次写起来感觉非常陌生,就连怎么引用名空间都忘记了.在经过恶补后还是慢慢地适应了. 1.项目预计用时: 构建并写出大概的数据结构,程序框架及模块: 30min 实现文件夹 ...
- Individual Project - Word frequency program
1.项目预计用时 -计划学习C#和百度一些用法的时间:5小时 -项目本身打算写两个类,一个是遍历搜索文件夹的,另外一个用来统计单词.计划用时:5小时 2.项目实际用时 学习C#以及正则表达式的用法:3 ...
- Record for Individual Project ( Word frequency program )
1. 预计时间 ● 对问题总体的理解.规划:10 min ● 设计编写程序:5 h ● 调试: 分模块-40 min; 总体-40min ● 测试(性能分析).改进:1 h 2. 实际用时 ● 对 ...
- THE First Individual Project - Word frequency program
第一次写博客,这次也是本学期写到第一个程序. 老师要求网址:http://www.cnblogs.com/jiel/p/3311400.html#2777556 一.项目预计时间 一开始想使用不熟悉的 ...
- Individual Project - Word frequency program-11061171-MaoYu
BUAA Advanced Software Engineering Project: Individual Project - Word frequency program Ryan Mao (毛 ...
- Project: Individual Project - Word frequency program----11061192zmx
Description & Requirements http://www.cnblogs.com/jiel/p/3311400.html 项目时间估计 理解项目要求: 1小时 构建项目逻辑: ...
随机推荐
- 使用vue的v-for生成table , 给table加上序号
现在有一个使用mybatis的分页插件生成的table,table中数据是通过vue获得的 , 前台显示使用<tr v-for="item in items"> 后台v ...
- leetcode 7. Reverse Integer [java]
public int reverse(int x) { long res = 0; while (x != 0){ res = res* 10 + x % 10; x /= 10; } if(res ...
- luogu P4515 [COCI2009-2010#6] XOR
luogu P4515 [COCI2009-2010#6] XOR 描述 坐标系下有若干个等腰直角三角形,且每个等腰直角三角形的直角顶点都在左下方,两腰与坐标轴平行.被奇数个三角形覆盖的面 积部分为灰 ...
- 从零上手Python关键代码
来源 https://www.kesci.com/home/project/59e4331c4663f7655c499bc3
- luogu P4718 【模板】Pollard-Rho算法(贴代码)
嘟嘟嘟 从标题中能看出来,我只是想贴一个代码. 先扯一会儿. 前几天模拟考到了这东西,今天有空就学了一下. 到网上找资料,发现前置技能是miller-rabin筛法,于是我还得先学这么个东西. 学mi ...
- go标准库的学习-encoding/base64
参考:https://studygolang.com/pkgdoc 导入方式: import "encoding/base64" base64实现了RFC 4648规定的base6 ...
- ESP32 DAC
ESP32有两个DAC通道,通道1链接GPIO25, 通道2链接GPIO26; 当DAC设置为 “built-in DAC mode”的时候,I2S可以通过DAC发送数据: 使用示例: dac_out ...
- 错误:“Manifest merger failed with multiple errors, see logs”
今天用Android Studio打开以前写个的项目后,出现如下错误:Manifest merger failed with multiple errors, see logs 现象是: 遇到这个问 ...
- Android学习之基础知识五—ListView控件(最常用和最难用的控件)
ListView控件允许用户通过上下滑动来将屏幕外的数据拉到屏幕内,把屏幕内的数据拉到屏幕外. 一.ListView的简单用法第一步:先创建一个ListViewTest项目,在activity_mia ...
- java 迭代器遍历List Set Map
Iterator接口: 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现Iterator接口的对象 Iterator对象称作为迭代器,用以方便的对容器内元素的遍历 ...