WordCount 統計行數、字符數、單詞數


一、作業要求:

系統分析與設計課程個人項目作業 

二、代碼地址:

https://github.com/13882163221/wc.git

三、PSP表格

PSP階段 預估耗時(分鍾) 實際耗時(分鍾)
計划  100  160
估計這個任務需要多少時間  100  140
開發  100  120
需求分析  30 30 
生成設計文檔  20 20 
設計復審  30 30 
代碼規范  20 20 
具體設計  30 30 
具體編碼  40 40 
代碼復審  30 30 
測試  10 20 
報告  20 20 
測試報告  20 20 
計算工作量  10 20
事后總結  20 20 
合計  580  720

在安排時間的時候估計和實際還是有一定的差距。在編寫代碼的時候,以為自己會很快編完,但是由於很久沒有編寫c語言的代碼了,所以編代碼的時候有些語法有點忘了,導致編代碼的時間與預期差距很大。

四、解題思路

1.首先分析用什么語言寫

本題是統計文件里的行數,單詞數,字符數的數量。對我而言,與其它語言相比,我比較熟悉C語言,面對這種小程序,我覺得用C語言寫更簡單一點。

2.分析需要用到幾個函數

我們要統計行數,單詞數,字符數,所以要用三個函數來分別統計這三者。另外,還可以用一個函數來統計這三者,程序運行時,可以直接顯示這三者。當然還有一個函數就是main函數。

3.分別編寫函數內容

每個函數里的內容其實還是很容易的,我會在后面進行代碼展示及解釋

五、程序設計實現過程

CharCount()函數:用於統計字符數

WordCount()函數:用於統計單詞數

LineCount()函數:用於統計行數

Passage()函數:用於統計字符數、單詞數、行數

六、代碼說明

1.CharCount()函數
 1 //統計字符數
 2 void CharCount()
 3 {
 4     FILE *fp;
 5     int charCount = 0;
 6     char ch;//讀取文件返回的字節
 7     if((fp = fopen("test.txt","r")) == NULL)
 8     {
 9         printf("文件打開失敗.");
10     }
11     ch = fgetc(fp);
12     while(ch != EOF)
13     {
14             charCount++;
15             ch = fgetc(fp);
16     }
17     printf("字符數為:%d個.\n",charCount);
18     fclose(fp);
19

這個函數用於統計文件中的字符數,一個個字符依次讀取,直到讀完為止。

2.WordCount()函數
 1 //統計單詞數
 2 void WordCount() 
 3 {
 4     FILE *fp;
 5     int wordCount = 0,flag=0;
 6     char ch;//讀取文件返回的字節
 7     if((fp = fopen("test.txt","r")) == NULL)
 8     {
 9         printf("文件打開失敗.");
10     }
11     ch = fgetc(fp);
12     while(ch != EOF)
13     {
14         if (ch==' ')
15         {
16             flag=0;
17             ch = fgetc(fp);  
18         }
19         else 
20         {   
21             if(flag==0)
22             {
23                 wordCount ++;    
24                 flag=1;
25             }
26             ch = fgetc(fp);
27         }
28     }
29     printf("單詞數為:%d個.\n",wordCount);
30     fclose(fp);
31 }

這個函數用於統計文件中的單詞數,一個個字符依次讀取,遇到空格就加一,直到讀完為止。

3.LineCount()函數
 1 //統計行數
 2 void LineCount()
 3 {
 4     FILE *fp;
 5     int lineCount = 0;
 6     char ch;//讀取文件返回的字節
 7     if((fp = fopen("test.txt","r")) == NULL)
 8     {
 9         printf("文件打開失敗.");
10     }
11     ch = fgetc(fp);
12     while(ch != EOF)
13     {
14         if (ch == '\n')
15         {
16             lineCount++;
17             ch = fgetc(fp);
18         }    
19         else 
20         {   
21             ch = fgetc(fp);
22         }
23     }
24     printf("行數為:%d行.\n",lineCount);
25     fclose(fp);
26

這個函數用於統計文件中的行數,一個個字符依次讀取,遇到"\n"就加一,直到讀完為止。

4.Passage()函數
 1 void Passage()
 2 {
 3     FILE *fp1;
 4     FILE *fp2;
 5     int lineCount=0,wordCount=0,charCount=0;
 6     int flag=0;
 7     char ch;//讀取文件返回的字節
 8     if((fp1 = fopen("test.txt","r")) == NULL)
 9     {
10         printf("文件打開失敗.");
11     }
12     ch = fgetc(fp1);
13     while(ch != EOF)
14     {
15         charCount++;
16         if (ch == '\n')
17         {
18             lineCount++;
19             ch = fgetc(fp1);
20         }
21         else if(ch==' ')
22         {
23             flag=0;
24             ch = fgetc(fp1);
25         }        
26         else 
27         {   
28             if(flag==0)
29             {
30                 wordCount ++;    
31                 flag=1;
32             }
33             ch = fgetc(fp1);
34         }
35     }
36     printf("字符數為:%d個.\n",charCount);
37     printf("單詞數為:%d個.\n",wordCount);
38     printf("行數為:%d行.\n",lineCount);
39     fclose(fp1);
40     fp2=fopen("result.txt","w");
41     fprintf(fp2,"字符數為:%d個.\n",charCount);
42     fprintf(fp2,"單詞數為:%d個.\n",wordCount);
43     fprintf(fp2,"行數為:%d行.\n",lineCount);
44     fclose(fp2);  
45 }

 

 

這個函數用於統計文件中的行數,單詞數,字符數,將讀取的結果放在新的文件夾result.txt中。

5.main() 函數
 1 int main(int argc,char *argv[])
 2 {
 3     //統計單詞數
 4     if ((strcmp(argv[1], "-w") == 0) && (strcmp(argv[2], "test.txt") == 0))
 5     {
 6         WordCount();
 7     }
 8     //統計字符數
 9     if ((strcmp(argv[1], "-c") == 0) && (strcmp(argv[2], "test.txt") == 0))
10     {
11         CharCount();
12     }
13     //統計行數
14     if ((strcmp(argv[1], "-l") == 0) && (strcmp(argv[2], "test.txt") == 0))
15     {
16         LineCount();
17     }
18     //統計字符數,單詞數,行數
19     if ((strcmp(argv[1], "-p") == 0) && (strcmp(argv[2], "test.txt") == 0))
20     {
21         Passage();
22     }
23     return 0;
24 }

 

測試的時候通過輸入"-w,-c,-l,-p"來實現自己想要的功能

七、測試設計過程

1.將代碼工程放在電腦的D盤

 

2.用cmd命令進入Debug

3.Debug文件夾內部內容

test.txt是用於統計的文件,result.txt是用於接收程序返回結果的文件

4.字符數統計測試

5.單詞數統計測試

6.行數統計測試

7.三者統計測試

8.result.txt文件夾返回的內容

八、總結及個人體會

  在這次個人項目中,我覺得收獲最大的地方就是學會了博客園的編寫及閱讀。在博客園這個平台上,我可以看到很多優秀的博客,從里面學到很多東西。

我還能夠和博客園中有很多編程經驗的老師溝通,學習他們的代碼格式以及很多編程學習經驗。

九、參考文獻鏈接

PSP表格的應用,參考了鄒欣老師的博客:http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html

博客的排版,參考了范飛龍老師的這篇博客:

http://www.cnblogs.com/math/p/se-tools-001.html

有關Git的使用,參考了廖雪峰的官方網站

有關linux上傳文件到github,參考了:

https://www.2cto.com/kf/201806/755193.html

 


免責聲明!

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



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