20180912-3 词频统计

无人久伴 提交于 2019-11-29 22:05:38

此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583]

 

词频统计 SPEC 20180918

老五在寝室吹牛他熟读过《鲁滨逊漂流记》,在女生面前吹牛热爱《呼啸山庄》《简爱》和《飘》,在你面前说通读了《战争与和平》。但是,他的四级至今没过。你们几个私下商量,这几本大作的单词量怎么可能低于四级,大家听说你学习《构建之法》,一致推举你写个程序名字叫wf,统计英文作品的单词量并给出每个单词出现的次数,准备用于打脸老五。

希望实现以下效果。以下效果中数字纯属编造。

功能1 小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键
盘在控制台下输入命令。

功能1的思想:使用三个数组用于接收单词,存储单词和统计字数。根据字母的个数进行遍历。每记录一个单词要判断这个单词是否已经出现过,如果没有出现过就记录这个单词,如果出现过这个单词,单词的数量加1.

 gets(str2);
    t=strlen(str2)+1;
    while(j<t)  
    {
        for(;str2[j]==32;j++);

        while(k<N&&str2[j]!=32) 
                str1[i][k++]=str2[j++]; 
        str1[i][k]='\0';
        strC[i]=1;  
        for(x=0;x<i;x++)  
            if(strncmp(str1[i],str1[x],N)==0) 
            {
                strC[x]++; 
                i--;      
                break;
            }      
            i++;  
            k=0;
    }
    printf("total %d\n\n",i);   
    int n=0,max,temp;
    while(n<i){
        max=0;
        for(int t=0;t<i;t++){
            if((strC[t]>max)&&(strC[t]!=0)){
                temp=t;
                max=strC[t];
            }
        }
        printf("%s,%d\n",str1[temp],strC[temp]);
        strC[temp]=0;
        n++;
    }

为了评估老五的词汇量而不是阅读量,total一项中相同的单词不重复计数数,出现2
次的very计数1次。

因为用过控制台和命令行,你早就知道,上面的">"叫做命令提示符,是操作系统的一部分,而不是你的程序的一部分。

此功能完成后你的经验值+10.

 

注:由于时间有限,文件过大,要交作业,不能及时处理这个问题,所以对文件进行了改变

功能2 支持命令行输入英文作品的文件名,请老五亲自录入。

功能2的思想:在这个功能模块中用了很多c语言对文件处理的语法,如为读入的文件设置缓冲区,利用文件的路径读文件,为文件分配缓冲区的大小,还要关闭文件等操作。对单词出现的次数多的处理和功能1和实现功能类似。

char *pchBuf = NULL;
    FILE *fp;
    int count=0;
    fp=fopen("word_count_demo.txt","r");
    fseek(fp,0,SEEK_END);
    int nlen=ftell(fp);
    rewind(fp);
    pchBuf = (char*) malloc(sizeof(char)*nlen+1);
    nlen = fread(pchBuf, sizeof(char), nlen, fp);
    pchBuf[nlen] = '\0';
    t=strlen(pchBuf)+1;

功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。
>dir folder
gone_with_the_wand
runbinson
janelove
>wf folder
gone_with_the_wand
total 1234567 words
the 5023
a 4783
love 4572
fire 4322
run 3822
cheat 3023
girls 2783
girl 2572
slave 1322
buy 822
----
runbinson
total 1234567 words

功能3的思想:这个模块的创新点,把文件的路径(这里是相对路径)当成变量传递给fopen,其他部分和功能2,和功能3有重合。

while(gets(path)){
        fp=fopen(path,"r");
        fseek(fp,0,SEEK_END);
        int nlen=ftell(fp);
        rewind(fp);
        pchBuf = (char*) malloc(sizeof(char)*nlen+1);
        nlen = fread(pchBuf, sizeof(char), nlen, fp);
        pchBuf[nlen] = '\0';
        printf("%s\n", pchBuf); 
        t=strlen(pchBuf)+1;
                ...
}

 

功能4 :思考了很久还是不会

总结:

    1.实现的功能比较复杂,规模比较大,所以花费的时间比较长。

    2.对c语言对文件的读取等操作不熟悉,所以在完成作业的同时,还需要复习以前的知识。

    3.部分功能没有充足的时间实现和完善。

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