zoukankan      html  css  js  c++  java
  • C语言实现词频统计——第二版

    原需求

    1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符。

    2.统计英文单词在本文件的出现次数

    3.将统计结果排序

    4.显示排序结果

    新需求:

    1.小文件输入. 为表明程序能跑

    2.支持命令行输入英文作品的文件名

    3. 支持命令行输入存储有英文作品文件的目录名,批量统计

    4. 从控制台读入英文单篇作品,重定向输出

    代码实现:

    在原代码的基础上稍做了修改,使之可以批量读取文件夹下的所有文件,所以加了一个mode来判断是单个文件输入还是文件夹输入,来不及整理程序,所以现在程序有点丑。这次作业交了以后会干两件事,第一是精简程序结构,第二是优化程序性能,可能会重新构思程序的主体部分。

     1     if (mode == 2)
     2     {
     3         printf("输入读入文件夹的名字:");
     4         scanf("%s", &fa);
     5         if ((fHandle = _findfirst("*.txt", &fa)) == -1L)      //文件夹目录 
     6         {
     7             printf("当前目录下没有txt文件
    ");
     8             return 0;
     9         }
    10         else
    11             do
    12             {
    13                 fp = fopen(fa.name, "r");
    14                 for (i = 0; i < 500; i++)
    15                 {
    16                     (w + i)->num = 1;
    17                 }
    18 
    19                 /****************单词匹配****************************************/
    20                 i = 0;
    21                 while (!feof(fp))//文件尚未读取完毕
    22                 {
    23                     ch = fgetc(fp);
    24                     (w + i)->a[j] = '';
    25                     if (ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122)                            //ch若为字母则存入
    26                     {
    27                         (w + i)->a[j] = ch;
    28                         j++;
    29                         flag = 0;                                                  //设标志位判断是否存在连续标点或者空格
    30                     }
    31                     else if (!(ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122) && flag == 0)       //ch若不是字母且上一个字符为字母
    32                     {
    33                         i++;
    34                         j = 0;
    35                         flag = 1;
    36                         for (m = 0; m < i - 1; m++)                                    //匹配单词,若已存在则num+1
    37                         {
    38                             if (stricmp((w + m)->a, (w + i - 1)->a) == 0)
    39                             {
    40                                 (w + m)->num++;
    41                                 i--;
    42                             }
    43                         }
    44                     }
    45                     /****************动态分配内存****************************************/
    46                     if (i == (p * 500))                                                      //用i判断当前内存已满
    47                     {
    48                         p++;
    49                         w = (struct fre_word*)realloc(w, 500 * p*(sizeof(struct fre_word)));
    50                         for (n = i; n <= 500 * p; n++)                                           //给新分配内存的结构体赋初值
    51                             (w + n)->num = 1;
    52                     }
    53                 }
    54                 i = i - 2;
    55                 quick(w, 0, i);
    56 
    57                 printf("文件%s词频统计如下
    ", fa.name);
    58                 printf("不重复的单词数:");
    59                 printf("%d
    ", i);
    60                 for (n = 0; n <10; n++)
    61                 {
    62                     printf("文档中出现的单词:");
    63                     printf("%-18s", (w + n)->a);
    64                     printf("其出现次数为:");
    65                     printf("%d
    ", (w + n)->num);
    66                 }
    67                 printf("
    ");
    68                 
    69             } while (_findnext(fHandle, &fa) == 0);
    70             _findclose(fHandle);
    71             fclose(fp);
    72             return 0;
    73             free(w);
    74 
    75     }

    其余部分和之前第一版几乎没有区别,就不再赘述。

    运行结果:

    功能1:

    功能2:


    功能3:

    功能4:

    coding:https://git.coding.net/gongcr/word-frequency.git

    openssh:git@git.coding.net:gongcr/word-frequency.git

    git:git://git.coding.net/gongcr/word-frequency.git

    得分项:

    表一:

    表二:

    项目:词频统计第二版

    项目类型:个人项目

    项目日期:2016.9.11-2016.9.13

    11号

    类别c 内容c 开始时间s 结束e 中断I 净时间T
    项目实践 看书  8:00  10:00 20m 100m
    项目实践 需求分析 10:00 10:40 10m 30m
    项目实践 安装vs        

    12号

    类别c 内容c 开始时间s 结束e 中断I 净时间T
    项目实践 调试vs 8:00 10:00 0m 120m
    项目实践 重装系统/vs 12:00 16:00 0m 240m
    项目实践 效能分析 19:00 19:40 0m 40m
    项目实践 编码 20:00 22:00 20m 100m

     13号

    类别c 内容c 开始时间s 结束e 中断I 净时间T
    项目实践 查资料 8:00 10:30 0m 150m
    项目实践 编码 10:30 11:30 10m 50m
    项目实践 编码 13:40 15:00 50m 30m
    项目实践 计算工作量 15:00 15:20 0m 20m
    项目实践 写博客 20:00 21:15 0m 75m
  • 相关阅读:
    计算机硬件
    队列、堆、栈、堆栈的区别
    操作系统与应用程序的关系
    DNS与HTTPDNS
    配置静态路由传送网络包
    django的nginx配置
    视频流和文件传输相关协议
    HTTPS 对称加密和非对称加密
    HTTP1.1/2.0与QUIC协议
    mysql join联表 + id自增
  • 原文地址:https://www.cnblogs.com/gongcr/p/5873493.html
Copyright © 2011-2022 走看看