个人第四次作业——结对编程

狂风中的少年 提交于 2019-12-01 08:58:52

结对编程

git地址 git地址
结对成员 宁晓静
结对成员学号 201831061202

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
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
    }

代码复审

我们使用了源自网络的编程规范:编程规范
在代码整合与复审过程中首先发现了关于代码结构的一系列问题,因为在最初对于代码规划上的一些小问题,使代码读起来不是足够条理,虽然不影响运行,但可读性不高。
其次是变量命名的问题,因为经常使用如a、b之类的简单变量名,使代码阅读起来不够清晰。
最终我们经过讨论与整合修改了上述问题。

性能分析

异常处理

当找不到文件时则提示用户并退出程序

测试

分别对几行句子及大量文章进行测试,结果全部正确

结对过程

有一个共同完成的伙伴,可以共同学习新的内容,不仅遇到问题可以交流讨论,更多了一个人督促自己,总体来说是1+1>2的

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!