我喜欢宁宁宁

导航

软件工程基础——第四次作业

软件工程基础——第四次作业

结对编程

git地址 https://github.com/lilyShuangszyzhk/WordCount
队友 双泽媛
队友学号 201831074121
队友博客 https://www.cnblogs.com/szy211/p/11674445.html

·PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
Estimate 估计这个任务需要多少时间 1200 1400
Development 开发 1140 920
Analysis 需求分析 (包括学习新技术) 300 240
Design Spec 生成设计文档 60 60
Design Review 设计复审 (和同事审核设计文档) 60 60
Coding Standard 代码规范 (为目前的开发制定合适的规范) 60 30
Design 具体设计 120 100
Coding 具体编码 300 240
Code Review 代码复审 120 120
Test 测试(自我测试,修改代码,提交修改) 120 70
Reporting 报告 150 180
Test Report 测试报告 60 100
Size Measurement 计算工作量 30 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 60 60
合计 1320 1130

设计思路

主要代码

1.打开文件并判断是否成功

ifstream fp(filename, ios::in);
if (!fp)//判断文件是否打开
    {
        cout << "未能成功打开" << filename << ",请检查文件是否存在";
        getchar();
        exit(1);
    }

2.英文只要字母相同,无论大小写都算作一个单词,所以首先将所有大写字母全部转换为小写

void change(char a)
{
    if (a >= 65 && a <= 90) { a += 32; }//大写转为小写
}

3.判断是否为空行

if (ch != ' ' && ch != '\n') { isline = 1; }//标记为非空行

4.词频统计(使用无穷自动机)

switch (process)
        {
        case 0:if (ch >= 97 && ch <= 122) { word = word + ch; nap++; }
            else { word = ""; nap = 0; }break;
        case 1:if (ch >= 97 && ch <= 122) { word = word + ch; nap++; }
            else { word = ""; nap = 0; }break;
        case 2:if (ch >= 97 && ch <= 122) { word = word + ch; nap++; }
            else { word = ""; nap = 0; }break;
        case 3:if (ch >= 97 && ch <= 122) { word = word + ch; nap++; }
            else { word = ""; nap = 0; }break;
                //第四位仍是字母则记为单词
        case 4:if (ch != ' ' && ch != '\n' && ch != '!' && ch != '.' && ch != ',' && ch != ':' && ch != '(' && ch != ')' && ch!='?')
        {
            word = word + ch;
        }
            else { ++word_count[word]; nap = 0; word = ""; words++; }break;
        }

5.统计行数:因为代码中设定为读到换行符才记为行数+1,而文档的最后一行无换行符,所以设定输出结果为(lines+1)

//非空行且读到换行符则行数+1
if (ch == '\n')
        {
            if (isline == 1) { lines++; }
            isline = 0;//判断标记置0
        }

6.构造容器:对于这部分内容完全是全新的知识,学习与应用上都花费了大量时间,map的迭代器起到了很大的作用(我比队友基础要弱一些,在这一部分拖了后腿)

map<string, int> word_count;
int nSize = word_count.size(), i = 1;
    multimap<int, string, greater<int> > mapw;

    for (map<string, int>::iterator it1 = word_count.begin(); it1 != word_count.end(); ++it1)
    {
        mapw.insert(pair<int, string>(it1->second, it1->first));//将word_count输入到mapw

代码复审

编程规范源自网络:https://zhuanlan.zhihu.com/p/20326454
我们的代码可读性不高,规范度不够,在这一阶段进行了完善。

性能分析

因为我对性能分析这一技能的掌握较弱,所以这一部分在队友的电脑上完成,截图参见队友博客——https://www.cnblogs.com/szy211/p/11674445.html。

结对感想

结对编程给了我一次全新的体验,自己在编程方面的不足也充分的体现了出来,不过队友的支持真的帮助了我很多,尤其是性能分析,从队友那里学到了很多。

posted on 2019-10-15 21:25  我喜欢宁宁宁  阅读(138)  评论(1编辑  收藏  举报