一.地址
GitHub项目地址:https://github.com/T1L/WordCount.git
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 880 | 1400 |
· Estimate | · 估计这个任务需要多少时间 | 1000 | 2000 |
Development | 开发 | 760 | 1270 |
· Analysis | · 需求分析 (包括学习新技术) | 40 | 60 |
· Design Spec | · 生成设计文档 | 30 | 40 |
· Design Review | · 设计复审 (和同事审核设计文档) | 50 | 60 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
· Design | · 具体设计 | 30 | 50 |
· Coding | · 具体编码 | 400 | 900 |
· Code Review | · 代码复审 | 60 | 50 |
· Test | · 测试(自我测试,修改代码,提交修改) | 100 | 120 |
Reporting | 报告 | 120 | 140 |
· Test Report | · 测试报告 | 60 | 60 |
· Size Measurement | · 计算工作量 | 30 | 40 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
| 合计 | 880 | 1400 |
三、解题思路
看到题目的时候就在想,如何完成对单词的计数,因为要求是四个字母及以上开头的单词,所以一开始不知道该如何写,在百度上参考了很多别人写过的代码,我的思路是先一行一行的读取文本中的内容,然后进行单词的判断,用一个变量对字符计数,满足则+1,大于等于4则满足要求的单词条件,区分满足条件和不满足条件的单词,作业要求要对单词计数,因此我想的是将满足条件的单词存入一个新的集合再进行计数,里面就全是满足条件的单词,这样就简单多了,新增功能要求输出高频词汇,同样用变量对相同单词出现的次数计数,用双循环进行比较并交换进行排序,用一个集合进行存储排序后的单词,然后再用函数进行输出,输出指定长度词组,用一个新的字符串,根据指定的长度添加单词进去,再用集合中的进行比较,相同则次数+1,最后用函数输出。
四、设计实现过程
流程如下
五、主要代码
Main函数
static void Main(string[] args)
{
Console.WriteLine("输入读取文本路径:");
path1 = Console.ReadLine();
Console.WriteLine("输入想要查找的词组长度:");
number = int.Parse(Console.ReadLine());
Console.WriteLine("想要输出的数量:");
Num = int.Parse(Console.ReadLine());
StreamReader a = new StreamReader(path1, Encoding.Default);
string line;
while ((line = a.ReadLine()) != null)
{
Me.Lines.Add(line);//一行一行读入
}
Me.WordsCount();
Me.Print1();//输出字符 单词 行的数量
Me.Print2();//输出指定长度的单词及次数
path2 = "C:\\Users\\RAIse\\Desktop\\Result.txt";
System.IO.File.WriteAllLines(path2, Me.Str);
Console.ReadKey();
}
对单词进行排序
List<string> WordSort() { List<Word> Aword = new List<Word>(); int i = 0; for (; i < Words.Count - 1; i++) { int k = 0; for (; k < Words.Count - 1; k++) { if (Words[i].num > Words[k].num) { Word m = Words[i]; Words[i] = Words[k]; Words[k] = m; } } } i = 0; if (Words.Count < Num) { for (; i < Words.Count; i++) { Aword.Add(Words[i]); } } else { for (; i < Num; i++) { Aword.Add(Words[i]); } } List<string> words = new List<string>(); foreach (var word in Aword) { words.Add(word.txt); } words.Sort(); return words; }
读取文本
运行结果
输出文本
六、代码测试
断点测试
效能分析
七丶Git上传
八、总结
感觉作业难度比较大,参考了网上许多别人的算法,也询问了同学许多问题,收获还是蛮多嘛,看来自己还是要花点时间补一补之前学过的东西。