WordCount基本功能


項目的gitee地址:https://gitee.com/ITtoto/WordCount

 

開發語言:C語言

PSP2.1表格

PSP2.1

PSP階段

預估耗時

(分鍾)

實際耗時

(分鍾)

Planning

計划

20

 16

· Estimate

· 估計這個任務需要多少時間

 30

 27

Development

開發

 120

 160

· Analysis

· 需求分析 (包括學習新技術)

 20

 18

· Design Spec

· 生成設計文檔

 20

 0

· Design Review

· 設計復審 (和同事審核設計文檔)

 30

 0

· Coding Standard

· 代碼規范 (為目前的開發制定合適的規范)

 20

 0

· Design

· 具體設計

 30

 50

· Coding

· 具體編碼

 100

 150

· Code Review

· 代碼復審

 20

 0

· Test

· 測試(自我測試,修改代碼,提交修改)

 10

 20

Reporting

報告

 20

 13

· Test Report

· 測試報告

 10

 2

· Size Measurement

· 計算工作量

 20

 5

· Postmortem & Process Improvement Plan

· 事后總結, 並提出過程改進計划

 10

15

 

合計

 480

 476

 

WordCount需求說明

  WordCount的需求可以概括為:對程序設計語言源文件統計字符數、單詞數、行數,統計結果以指定格式輸出到默認文件中,以及其他擴展功能,並能夠快速地處理多個文件。

可執行程序命名為:wc.exe,該程序處理用戶需求的模式為:

wc.exe [parameter] [input_file_name]

存儲統計結果的文件默認為result.txt,放在與wc.exe相同的目錄下。

 

基本功能

  wc.exe -c file.c     //返回文件 file.c 的字符數wc.exe -w file.c     //返回文件 file.c 的單詞總數wc.exe -l file.c     //返回文件 file.c 的總行數wc.exe -o outputFile.txt     //將結果輸出到指定文件outputFile.txt

注意

  空格,水平制表符,換行符,均算字符。

  由空格或逗號分割開的都視為單詞,且不做單詞的有效性校驗,例如:thi#,that視為用逗號隔開的2個單詞。

  -c, -w, -l參數可以共用同一個輸入文件,形如:wc.exe –w –c file.c 。

  -o 必須與文件名同時使用,且輸出文件必須緊跟在-o參數后面,不允許單獨使用-o參數。 

 

參數及其約定如下:

參數名字

參數意義

用法示例

-c[必選]

文件的字符數

示例:wc.exe -c file.c [表示返回文件file.c的字符數,並存儲在result.txt中]

-w[必選]

文件單詞總數

示例:wc.exe -w file.c [表示返回文件file.c的單詞數,並存儲在result.txt中]

-l[必選]

文件行數

示例:wc.exe -l file.c [表示返回文件file.c的總行數,並存儲在result.txt中]

-o[必選]

輸出文件名

示例:wc.exe –c file.c -o outfile.txt [表示返回文件file.c的字符數,並存儲在outfile.txt中]

 

 

基本思路

  根據C語言寫的小程序,三個功能,分別輸出文件的字符數、行數和單詞數,每個功能寫一個函數,在總函數中具體寫輸出格式,在具體函數中進行具體編碼。代碼中肯定要進行文件流的一些具體方法,fopen和fwrite等函數也會用到。在做這個的時候,我不想什么炫技的方法,指向一步一步的簡單的做下來,所以if else就是一個很好的分類方法了,只要肯分,所有的命令肯定都規規矩矩的一個一個的都能實現,關鍵就是要看細節代碼的部分了,不過對於分揀劉的操作,其實說到底就是那幾部,沒什么難的。。

 

詳細設計 :

  本次實現使用C語言,使用vs2013進行開發。

  設置基礎功能有三個類charcount、wordcount和linecount三個類分別對應的事字符數、單詞數和行數的統計,最后一個main類收尾,代碼如下:

 

 

字符數類:

 1 int charcount(char file[]){
 2 FILE *fp= NULL;
 3 int ccount = 0;
 4 char c;
 5 if (fopen_s(&fp, file, "r")){
 6 printf("找不到文件\n");
 7 exit(-1);
 8 }
 9 c = fgetc(fp);
10 while (c != EOF){
11 c = fgetc(fp);
12 ccount++;
13 }
14 fclose(fp);
15 return ccount;
16 }

 

 

單詞數類:

 1 int wordcount(char file[]){
 2 FILE *fp = NULL;
 3 int wcount = 0;
 4 char c;
 5 if (fopen_s(&fp, file, "r")){
 6 printf("找不到文件\n");
 7 exit(-1);
 8 }
 9 c = fgetc(fp);
10 while (c != EOF){
11 if (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z' || c >= '0'&&c <= '9'){
12 while (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z' || c >= '0'&&c <= '9' || c == '_'){
13 c = fgetc(fp);
14 }
15 wcount++;
16 c = fgetc(fp);
17 }
18 c = fgetc(fp);
19 }
20 fclose(fp);
21 return wcount;
22 }

 

 

行數類:

 1 int linecount(char file[]){
 2 FILE *fp = NULL;
 3 int lcount = 0;
 4 char c;
 5 if (fopen_s(&fp, file, "r")){
 6 printf("找不到文件\n");
 7 exit(-1);
 8 }
 9 c = fgetc(fp);
10 while (c != EOF){
11 if (c == '\n'){
12 lcount++;
13 c = fgetc(fp);
14 }
15 else
16 {
17 c = fgetc(fp);
18 }
19 }
20 fclose(fp);
21 return lcount+1;
22 }

 

 

main類:

 1 int main(){
 2 char order[100], file[100];
 3 printf("輸入命令:c:字符數 l:行數 w:單詞數 q:退出 \n");
 4 while (1){
 5 printf("請輸入用戶命令: wc.exe -");
 6 scanf_s("%s", &order,100);
 7 if (order[0] == 'c'){
 8 printf("請輸入文件名: ");
 9 scanf_s("%s", &file,100);
10 printf("文件的字符數為: %d\n", charcount(file));
11 continue;
12 }
13 if (order[0] == 'w'){
14 printf("請輸入文件名: ");
15 scanf_s("%s", &file, 100);
16 printf("文件的單詞數為: %d\n", wordcount(file));
17 continue;
18 }
19 if (order[0] == 'l'){
20 printf("請輸入文件名: ");
21 scanf_s("%s", &file, 100);
22 printf("文件的行數為: %d\n", linecount(file));
23 continue;
24 }
25 if (order[0] == 'q'){
26 break;
27 }
28 }
29 return 0;
30 }

 

 

測試設計:

 

 

總結:

  剛拿到作業題的時候感覺頭皮發麻,完全不知道從哪里下手,又要從文件流入手,又要兼顧命令,還要將結果輸出到1個新文件中,還有寫博客和一些亂七八糟的東西。無法下手,不過將老師的作業要求全部讀了一遍之后,更讓人迷糊了,所以干脆都不管了,只是將代碼方面的設計下來之后,感覺剩下來的東西也就不是那么讓人感到恐懼了,慢慢的也就熟悉上了,編碼方面的問題雖然有時候會卡一會,不過通過查找網上的資料和詢問同學之后也就搞定了都。感覺這次的作業讓我適應了將來工作的一個流程,還有和網上程序員打交道的途徑,提前將基礎都打好很有利於我們將來的社會工作,我認為這次作業很有意義!


免責聲明!

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



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