福大软工1816 · 第二次作业 - 个人项目
Github项目地址:
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 30 | 90 |
Development | 开发 | 90 | 100 |
· Analysis | · 需求分析 (包括学习新技术) | 90 | 90 |
· Design Spec | · 生成设计文档 | 30 | 40 |
· Design Review | · 设计复审 | 20 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 40 |
· Design | · 具体设计 | 50 | 60 |
· Coding | · 具体编码 | 200 | 300 |
· Code Review | · 代码复审 | 30 | 40 |
· Test | · 测试(自我测试,修改代码,提交修改) | 20 | 25 |
Reporting | 报告 | 30 | 40 |
· Test Report | · 测试报告 | 20 | 30 |
· Size Measurement | · 计算工作量 | 10 | 15 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 50 |
合计 | 680 | 850 |
解题思路描述
1.如何读取txt文件。 这个问题我上网查找了一下,方法有许多种,读取的方式也有不同,有按行读取和按字符读取。根据题目的情况我选择了按字符读取。2.如何统计行数,字符数。 读取文件有按行读取的方式,就用一个循环来按行读取一次,统计每次的字符长度来计算字符数。3.如何识别出符合要求的单词。 刚开始只想到通过多层判断的方法。4.如何选出频率最高的10个单词。 一想到排序的问题我就决定用优先队列实现,感觉写起来最简单。
设计实现过程
我将不同功能分为3个函数
countlines 统计行数
countcharacters 统计字符数
countwords 统计符合的单词
关键代码
typedef struct { //创建一个结构体 char word[50]; //存放该单词 int no; //记录该单词出现的次数 int count; //记录该单词的字符数}lie;
判断过程
if (ch >= 65 && ch <= 90) { ch = ch + 32;//将大写转为小写 } if (ch >= 87 && ch <= 122 && flag <= 3) { flag++; testword[flag] = ch;//满足要求将当前字符存入一个中间字符数组 } if ((ch < 87 || ch>122) && flag <= 3) { flag = 0;//不符合即清空 } if (flag >= 4 && ch != ' ') { flag++; testword[flag] = ch;//认定为一个合法单词后将其全部存入 }
求单词频率
for (i = 1; i <= kind; i++)//遍历 { for (j = 1; j <= flag; j++) { if (testword[j] != realword[i].word[j]) { i++; j = 1; break; } if (j == flag) { realword[i].no++;//同一单词,频数加一 i = kind; sign = 1; break; } } } if (sign == 0) { kind++; for (int k = 1; k <= flag; k++) { realword[kind].word[k] = testword[k];//给新单词分配空间 } realword[kind].count = flag; realword[kind].no++; } flag = 0; sign = 0; }
实现对单词频数进行排序
for (int i = 0; i
输出频数最高的10个
while (!tmp.empty() && i<10) { cout<< "<" << q.top().word << ">: " << q.top().count << endl; q.pop(); i++; }
心路历程与收获
第一次写软工的实践作业,对我来说还是比较困难的,在写代码过程中有很多不熟练的地方,也查找了很多类似题目的代码,有很多时候我能理解一些算法的大体思路,但自己写代码是总是遇到各种的问题。写这份作业还是很困难的。不过也学到了一些新的东西。也有一些项目还未完成,还是有很多要学习的地方。