zoukankan      html  css  js  c++  java
  • 第一次作业

    要求0:作业要求地址  https://edu.cnblogs.com/campus/nenu/2016CS/homework/2110

    要求1:git仓库地址 (在分支v1.0上!!!):https://git.coding.net/sonicsun/WordFrequencyCount.git

    要求2:
      1. PSP阶段表格

    sp2.1 任务内容 计划共完成需要时间 (min) 实际完成需要时间 (min)
    Planning 计划 30 40
    Estimate

    估计这个任务需要多少时间,

    并规划大致工作步骤

    30 40
    Development 开发 960 1250
    Analysis 需求分析(包括学习新技术) 150 180
    Design Spec 生成设计文档 10 10
    Design Reviewe 设计复审(和同事审核设计文档) 0 0
    Coding Standard 代码规范(为目前的开发制定合适的规范) 30 40
    Desgin 具体设计 120 100
    Coding 具体编码 500 780
    Code Review 代码复审 30 20
    Test 测试(自我测试,修改代码,提交修改) 120 120
    Reporting 报告 120 120
    Test Report 测试报告 10 10
    Size Measurement 计算工作量 20 30
    Postmortem & Process Improvement Plan 事后总结,提出过程改进计划 90 80
    功能模块 具体阶段 预计时间 (min) 实际时间 (min)
    功能1 具体设计 120 90
    具体编码 180 190
    测试完善 40 40
    功能2 具体设计 120 120
    具体编码 250 300
    测试完善 70 60
    功能3 具体设计 50 60
    具体编码 180 240
    测试完善 20 20

      2. 预估耗时与实际耗时的差距原因:
        
    (1)
    这次使用了很少使用的c语言来编写程序,对语言的掌握不太熟练,很多地方都要去网上查资料;
         (2)还有其他的事情需要忙;
         (3)题目部分阐述含糊不清,花了一定时间来反复思考审清题意。

    要求3:

      1. 解题思路描述:
        刚开始拿到题目反复思考需要几个函数来实现功能,每个函数之间的功能上有什么关系,确定好关键点在于读取文件,分割单词,文件路径的转换,单词计数。
        然后先把每个函数之间调用的关系大致框架写了出来,发现主函数与方法都写在一个cpp中可读性太差,于是采用了多文件编译。
        去网上看博客学习了c语言如何读取文件。
        在单词的分隔上遇到了困难,多次测试应该如何读入单词才能更简便的实现单词分隔,一开始采用的使用结构体进行存储,直接读入一整行,然后进行遍历判断分隔,但是发现在单词的存储上实现难度大,于是采用了直接读入字符串的方法,发现字符串如果遇到了特殊符号同样在存储上有所困难,最终选择采用string和map,一位一位的判断,在计数上也更加方便。
        实现 wf -c 和 wf -f 的功能后,wf -n的功能实现只需要调用实现 wf -c 和 wf -f 的函数就可以,然后进行排序输出n个就行。

      2. 代码介绍:
        (1)单词的分割,计数:采用了map和string的方式对单词进行存储计数,利用map的特性可以轻易的对单词进行存储,但是在txt末尾判断结束时一开始有所困难,如果不是以特殊符号结束,最后一个单词总是丢失,最后在if语句中多加上了feof(fpRead)来对是否结束进行判断。

    void judge(char textname[]) //判断单词
    {
        string line="";
        char zxsb;
        map<string,int> Map;
        map<string,int> ::iterator it;
        FILE *fpRead = fopen(textname,"r");
        if(fpRead == NULL){
            printf("read file fail!!");
            return;
        }
        while(!feof(fpRead)){
            fscanf(fpRead,"%c",&zxsb);
            if((!(zxsb >= 'a' && zxsb <= 'z')&&!(zxsb >= 'A' && zxsb <= 'Z')&&!(zxsb >= '0' && zxsb <= '9'))||(feof(fpRead))){    //判断特殊符号
                if(( (line!="") &&!((line[0]>='0')&&(line[0]<='9')))){    //对单词进行计数
                    Map[line]++;
                }
                line="";
            }
            else if (zxsb >= 'A' && zxsb <= 'Z') {    //大写转换为小写
                zxsb = zxsb + 32;
                line = line + zxsb;
            }
            else if ((zxsb >= 'a' && zxsb <= 'z')||(zxsb >= '0' && zxsb <= '9')) {    //符合条件的字符加入string中    
                line = line + zxsb;
            }
        }
        printf("totle %d
    
    ",Map.size());
        for(it=Map.begin();it!=Map.end();it++)
            cout<<it->first<<"    "<<it->second<<endl;
        fclose(fpRead);
    
        return;
    }

        (2)wf -f 对文件路径的处理

    void pathopen(char filepath[]){
        changesign(filepath);       //对写入路径进行改变的函数,将单个斜杠改为两个斜杠
        int j;
        j = strlen(filepath);
        char filepath2[100];
        strcpy(filepath2,filepath);
        filepath2[j++]='*';
        filepath2[j++]='.';
        filepath2[j++]='t';
        filepath2[j++]='x';
        filepath2[j++]='t';
        filepath2[j++]='';    //此处方法比较笨,一个一个的加上,实现对txt文件的筛选
    
        string openfile = "";
        long Handle;
        struct _finddata_t FileInfo;
        if((Handle=_findfirst(filepath2,&FileInfo))==-1L)    //百度找的对文件进行遍历的方法
            printf("该文件夹下没有txt文件
    ");
        else
        {
            strcat (filepath,FileInfo.name);    //将文件路径与文件名进行拼接
            judge2(filepath);    //与wf -c功能类似的函数,对文件中的词频进行统计
            _findclose(Handle);
        }
        return;
    };

    测试结果

    总结???
      
    心路历程拒绝分享,原因看上一篇博客,想给我多少分就给我多少分吧,我也不需要这个分数来得到别人的肯定,毫无意义。收获就是对平时很少使用c语言的掌握又多了一些,知道了c语言里面的一些比较有用的函数,这个作业对我帮助不大,平时该怎么写代码还是怎么写代码,我更需要的是进入一个成熟的技术团队来学习软件工程,还明白了原来这门课的课后作业布置得这么不合理,花了大量的时间去做这个作业,导致我的一个项目往后延期了至少四天,每天背单词的时间延后到了晚上12点,当然你也可以说我自己不会时间管理,说我自己技术不行非要用不熟悉的c++来实现(只要你觉得自己的作业安排毫无问题的话)。
       这几天还懂得了原来人居高位批评的声音就会变少,拍马屁的人就会变多,当然每个人身处的环境不同,不能奢求别人来体会自己的处境,特别是当那个人是从高处往低处看的时候,有谁不喜欢站在高处大家都拍着自己的马屁自己意淫呢?在知乎上找周筠提问批评国内软件工程教育不行,自己跑去回答给自己推广自己写的书赚足名声?站在制高点来批评整个教育界?觉得只有自己能够拯救这么“惨”的教育现状???也许你是一个很厉害的程序员,一个优秀的作家,但是现在你绝对不会是一个优秀的教育家。

  • 相关阅读:
    拓端数据|R语言乘法GARCH模型对高频交易数据进行波动性预测
    拓端数据|Python中用Prophet模型对天气时间序列进行预测与异常检测
    拓端数据|R语言:状态空间模型和卡尔曼滤波预测酒精死亡人数时间序列
    拓端数据|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测
    拓端数据|数据挖掘:香水电商销售策略分析
    UOJ#523. 【美团杯2020】半前缀计数 后缀自动机
    LuoguP6688 可重集 线段树+hash
    LuoguP6687 论如何玩转 Excel 表格 树状数组
    LOJ#2303. 「NOI2017」蚯蚓排队 hash+链表
    LOJ#6289. 花朵 树链剖分+分治NTT
  • 原文地址:https://www.cnblogs.com/sonicsun/p/9683693.html
Copyright © 2011-2022 走看看