第二周作业——词频统计

题目需求具体如下:

https://edu.cnblogs.com/campus/nenu/2018fall/homework/2126

git地址:

https://git.coding.net/liu-xin/wf.git

功能1 小文件输入,为表明程序能跑。需要在控制台下输入命令,实现统计文件中不重复单词总个数,重复次数由高到低输出。

功能 2 命令行输入英文作品的文件名,实现作品不重复单词计数,重复次数由高到低输出前十位。

功能 3 命令行输入存储有英文作品文件的目录名,批量统计作品不重复单词总数,重复次数由高到低输出前十位。

功能 4从控制台读入英文单篇作品,表明你能提供更适合嵌入脚本的作品或者bing:linux重定向。

一、准备工作

  从头到尾浏览一遍题目要求以后,我第一反应不是编程思路是什么,而是先把准备工作做好。打开Excel表,随时记录时间,打开Word,随时记录遇到的困难和解决办法。

二、版本控制

  版本控制我之前是没有接触过的,刚开始是一脸懵,直接从度娘开始,查找什么是版本控制?什么是git?什么是tortoisgit?具体怎样操作都是一步一步跟着自己查找进行操作。但是,其中还是走了好多弯路,耗费了大量的时间在熟悉工具上。心得:只知道按步骤来,不思考,往往做着无用功。

第一步:下载、安装git和git客户端tortoisgit。

git下载地址:https://git-scm.com/download

tortoisgit下载地址:https://tortoisegit.org/download/

安装过程:点击下一步。

第二步:申请coding.net账号并新建一个项目

第三步:在coding.net上配置远程git ,具体请参见

https://blog.csdn.net/gyy930324/article/details/54575246

(PS:若是代码丢失,现在代码无法运行,找不到原版代码,需要恢复代码参见https://blog.csdn.net/jjs2749651/article/details/80763842。希望你用不到代码恢复,太惨了……)

三、学习过程

  准备工作做好之后,接下来是最核心的环节了,由于自己对C语言比较熟悉,选择了C语言进行编程。利用中午下课午休时间去图书馆借了谭浩强《C语言程序设计》,用于知识点的查漏补缺。

我把要求详细的分析了以后,列出了我认为比较关键的地方:

1. 文件的读取:

2. 文件遍历

3. 单词判断:a.重复   b.大小写  c.特殊符号

4. 词频排序:

5.控制台输出

6.代码整合

7.重定向

四、遇到的困难与解决办法

功能一:

  1. 忘记了C语言中文件的读。

解决办法:参见参见谭浩强《C语言程序设计》第四版第十章和https://blog.csdn.net/qq_29109941/article/details/74276375

  2.忘记了结构体和指针的用法。

解决办法:参见谭浩强《C语言程序设计》第四版 第八章和第九章。

  3.忘记了排序算法。

解决办法:参见谭浩强《C语言程序设计》第四版 P147。

  4.控制台使用命令行参数运行程序。

解决办法:int main(int argc,char *argv[])       

      //argv[0]指向程序运行的全路径名

    //argv[1]指向DOS命令行中执行程序名后的第一个字符串

    //argv[2]指向执行程序名后的第二个字符串

    //argv为存储命令行参数的字符串数组

功能二:

  1. 不知道怎么处理整本小说读。

解决办法:https://blog.csdn.net/yang332233/article/details/53081785 (实现txt读取)

  2.单词统计判断出现错误。

解决办法:除了大小写分别26个字母以外,处理特殊符号。

功能三 :

  1. 遍历文件夹中的txt困难。

解决办法:查找文件的类 struct _finddata_t结构体用法,chdir函数用法。

  2.无法自动输出文件中每一个txt的词频统计。

解决办法:每读取一个目录输出一次单词统计。

  3.各个功能代码整合困难。(判断输入是文件夹的名字,还是文件txt的名字比较困难)

解决办法:1)通过输入的参数判断:if (S_ISDIR(st.st_mode))

                  2)正则表达: 正则没看懂,最后选择的第一种解决办法。

功能四:

  1. 不理解题意。

解决办法:找度娘,浏览相关博客了解重定向的相关知识点。非自己实现,参考了潘世维同学的代码,在此表示感谢。

五、重要代码

1

long Handle;                                        //遍历文件夹中的txt
    struct _finddata_t fileinfo;
    struct stat st;                                        
    stat(argv[1],&st);                                    //判断某文件是文件夹还是文件
    if (S_ISDIR(st.st_mode))                            //是文件夹
    {
        chdir(argv[1]);                                    //chdir()用户将当前的工作目录改变成以参数路径所指的目录
        if((Handle=_findfirst("*.txt",&fileinfo))==-1L)  //findfirst搜索与指定的文件名称匹配的第一个实例,若成功则返回第一个实例的句柄,否则返回-1L。
            {
                printf("没有找到匹配的项目\n");
            }
        else
        {
            printf("%s\n",fileinfo.name);
            find(fileinfo);    
            while(_findnext(Handle,&fileinfo)==0)
            {
                printf("---\n"); 
                printf("%s\n",fileinfo.name);
                find(fileinfo);
                printf("---\n"); 
            }
            _findclose(Handle);
        }
    }
遍历文件夹中txt

2

1 FILE *fp;
2 fp=fopen(fileinfo.name,"r");
txt内容读取

3

void count(char s[])
{
    int i,j;
    int flag=0;
    for(i=0;i<=sum;i++)
    {
        if(strcmp(C[i].str,s)==0)
        {
            C[i].num++;
            flag=1;
            
        }
    }
    if(flag==0)
    {
        for(j=0;j<30;j++)
            C[sum].str[j]=s[j];
        C[sum].num++;
        sum++;
        
    }
}
单词计数

4

void paixu()
{
    int i,j;
    struct word a;
    for(i=0;i<sum;i++)
    {
        for(j=i+1;j<sum;j++)
        {
            if(C[i].num<C[j].num)
            {
                a=C[j];
                C[j]=C[i];
                C[i]=a;
            }
        }
    }
词频排序

六、 执行效果图

功能一

功能二

功能三

功能四

 

七、PSP阶段表格

PSP阶段 预计花费时间 实际花费时间 时间差距
功能一 480min 804min 324min 
txt文件的读取 60min 91min 31min
结构体和指针的用法 60min 87min 27min
单词计数 30min 42min 12min
排序算法 45nin 65min 20min
使用命令行参数运行程序 --- 287min  
代码调试 --- 232min  
功能二 60min 94min 34min
读取txt内容 60min 48min 12min
控制前十输出 10min 17min 7min
代码调试 --- 29min  
功能三 480min 546min 66min
遍历文件夹 180min 233min 53min
代码调试 --- 81min  
代码优化 --- 65min  
功能整合 120min 167min 47min
功能四 420min 465min 45min
需求分析 120min 134min 14min
重定向 180min 112min 68min
代码优化 --- 219min  

 

  

 

posted @ 2020-11-17 15:21  pengxp2008  阅读(154)  评论(0编辑  收藏  举报