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文件\n");
 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] = '\0';
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詞頻統計如下\n", fa.name);
58                 printf("不重復的單詞數:");
59                 printf("%d\n", i);
60                 for (n = 0; n <10; n++)
61                 {
62                     printf("文檔中出現的單詞:");
63                     printf("%-18s", (w + n)->a);
64                     printf("其出現次數為:");
65                     printf("%d\n", (w + n)->num);
66                 }
67                 printf("\n");
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

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM