软件工程-个人项目

软件工程-个人项目

1.相关

github地址

2·PSP表格

1474829-20180912224451696-421528294.png

3.解题思路

·需求

既然是软件工程实践,那最重要的就是明确需求。刚开始大致看了二十分钟需求,大致将软件分为三个模块。

·统计字符和行数都不难,要注意的是对空格回车的处理。

·计算单词的问题,重点在单词的判定,因为的题目的要求实在很有意思。

·至于排序和统计的需求,表示是最难的,到现在还没有调好orz。

·学习&回顾

表示现在的泪都是在补前面的债。庆幸有这种机会吧,值得一提的是大致又完整地复习了一边文件读取。

4.设计实现

表示今天软工理论课上老师说得十分有道理,要先设计好来,在开始写代码的时候效率才会高。当初就大致想了想一共三个模块,每个模块大致会有什么函数,然后就一把梭了,结果是浪费了很多时间。吸取教训!

关键函数自然是要画出流程图的了,比如单词判定中的函数,当时想着用正则做,但是没有实现的能力(似乎没有认真去看文档,因为刚好想到了自动机,感谢编译原理)

【假装这里有图片】可惜图画在ipad上,时间已经不允许我来贴图了(稍后更新)

5.改进&分析

作为一个自觉能写得出来就已经庆幸的弱鸡,觉得我自己能改进的应该就是把 cout改进成printf了。

性能分析如下

1474829-20180912224133185-1237586276.png

6.代码说明

用自动机实现单词的识别是个不错的选择,还有一种思路是正则表达式(下次可以试试)。

int is_word(int state, char input, int * count)//通过自动机实现单词筛选
{
    switch (state)
    {
    case Begin:
        if (isspace(input) || (!(input >= '0') && !(input <= '9'))) return Begin;

        if (isalpha(input)) return L2;
        if ((input >= '0'&&input <= '9')) return Wrong;

    case Wrong:

        if (isspace(input) || (!(input >= '0') && !(input <= '9'))) return Begin;
        else return Wrong;

    case L2:
        if ((input >= '0'&&input <= '9')) return Wrong;
        if (isalpha(input)) return L3;
        else return Begin;

    case L3:
        if ((input >= '0'&&input <= '9')) return Wrong;
        if (isalpha(input)) return L4;
        else return Begin;

    case L4:
        if ((input >= '0'&&input <= '9')) return Wrong;
        if (isalpha(input)) return Final;
        else return Begin;

    case Final:
        if (isalnum(input)) return Final;
        else { (*count)++; return Begin; }
    }
    return ERROR;
}

通过参考网上的博客,词频统计可采用哈希表来实现,再加上一个队列就可以排出前十名。【还有部分bug】

7.感想

·开发之前要先设计好框架

·阅读文档的能力很关键

·代码能力急需提高

转载于:https://www.cnblogs.com/wuji-walden/p/9637890.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值