博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
福大软工1816 · 第二次作业 - 个人项目
阅读量:5150 次
发布时间:2019-06-13

本文共 2921 字,大约阅读时间需要 9 分钟。

福大软工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++;    }

心路历程与收获

第一次写软工的实践作业,对我来说还是比较困难的,在写代码过程中有很多不熟练的地方,也查找了很多类似题目的代码,有很多时候我能理解一些算法的大体思路,但自己写代码是总是遇到各种的问题。写这份作业还是很困难的。不过也学到了一些新的东西。也有一些项目还未完成,还是有很多要学习的地方。

转载于:https://www.cnblogs.com/q1093797687/p/9637965.html

你可能感兴趣的文章
Part3_lesson4---协处理器访问指令
查看>>
Asp.Net url参数加密存在特殊符号处理方法
查看>>
css3
查看>>
强化学习(五)用时序差分法(TD)求解
查看>>
Python打卡第三周
查看>>
oracle按照in的顺序进行排序
查看>>
Inferred type 'S' for type parameter 'S' is not within its bound;
查看>>
objective里面的单例模式
查看>>
Git常用命令
查看>>
jQuery 遍历
查看>>
k8s中的api server的ca证书,可以和front proxy ca证书一样么?
查看>>
【UVa-679】小球下落——二叉树的编号
查看>>
Microsoft SQL Server sa 账户 登录错误18456
查看>>
windows:nginx配置http、https反向代理
查看>>
关于滚动更新的设计技巧
查看>>
rsync+ssh
查看>>
StackOverflow程序员推荐:每个程序员都应读的30本书
查看>>
链表 相关操作思路
查看>>
张瀚荣 如何用UE4制作3D动作游戏
查看>>
SQL ALTER TABLE 语句在项目中的使用
查看>>