WordCount扩展与优化
生活随笔
收集整理的這篇文章主要介紹了
WordCount扩展与优化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
合作者:201631062327,201631062128
碼云地址:https://gitee.com/LIUJIA6/WordCount3
一:項目說明
本次項目是在上次作業WorldCount的基礎上,利用結對編程的思想,完成對WorldCount項目的功能擴展
-s 遞歸處理目錄下符合條件的文件。(實現)
-a 返回更復雜的數據(代碼行 / 空行 / 注釋行)。(實現)
空行:本行全部是空格或格式控制字符,如果包括代碼,則只有不超過一個可顯示的字符,例如“{”。
其中,代碼行:本行包括多于一個字符的代碼。
空 行:本行全部是空格或格式控制字符,如果包括代碼,則只有不超過一個可顯示的字符,例如“{”。
注釋行:本行不是代碼行,并且本行包括注釋。一個有趣的例子是有些程序員會在單字符后面加注釋。[file_name]: 文件或目錄名,可以處理一般通配符。
二:部分代碼
基礎功能:測試返回單詞數,字符數,行數
int countw(char *file)//返回文件詞的數目 { FILE *f; f=fopen(file,"r"); char ch; if(NULL==(f=fopen(file,"r"))) { printf("文件"); } else while(!feof(f)) { ch=fgetc(f); if((ch >= 'a'&&ch <= 'z')||(ch>='A'&&ch<='Z')||ch=='_') aword=1; else if (aword) { cword++; aword=0; } } fclose(f); printf("單詞數:%d ",cword); } int countc(char *file) //返回文件的字符數 { FILE *f; f = fopen(file, "r"); char a; if(NULL==(f=fopen(file,"r"))) { printf("file is NULL"); } else while (!feof(f)) { a=fgetc(f); if (a != ' '&&a != '\n'&&a != '\t') cchar++; } fclose(f);printf("字符數:%d ",cchar); } int countl(char *file) //返回文件的行數 { FILE *f; f = fopen(file, "r"); int cline = 0; char a; if(NULL==(f=fopen(file,"r"))) {printf("file is NULL");} else while(!feof(f)) { a=fgetc(f); if(a=='\n'||a=='\t') cline++; }fclose(f);printf("行數:%d ",cline); return 1; }
?
拓展功能:測試返回代碼行,注釋行,空行和txt文件數
int count_blankline(char *file) //返回文件的空行數 { FILE *f; int b_num = 0; int ch_num = 0; char ch; f = fopen(file, "r"); if(NULL==(f=fopen(file,"r"))) { printf("file is NULL"); } else while (!feof(f)) { ch= fgetc(f); if (ch=='\n'){ if (ch_num<= 1) b_num++; ch_num = 0; } else if (ch!=' '&&ch!='\t'&&ch!='}') ch_num++; else if(ch=='}')b_num++; } fclose(f);printf("空行數:%d ",b_num); } int count_noteline(char *file) //返回文件的注釋行數 { FILE *f; int ch_num = 0;int note_num=0; char ch; f=fopen(file, "r"); if(NULL==(f=fopen(file,"r"))) { printf("文件不存在"); } else while (!feof(f)) { ch= fgetc(f); if(ch=='\n'){if(ch_num==2) note_num++; ch_num=0;} else if(ch=='/') ch_num++; else if(ch_num==1){if(ch=='/') ch_num++;} } fclose(f); printf("注釋行:%d ",note_num); } int count_codeline(char *file)//返回文件的代碼行數 { int ch_num = 0; int code_num=0; FILE *f; int tag=0; int flag=0; char a; f = fopen(file, "r"); if(NULL==(f=fopen(file,"r"))) {printf("文件不存在");} else while (!feof(f)) { a=fgetc(f);if(flag==2) { flag=0;tag++;} else{if(a=='\n'&&ch_num>1) {code_num++; ch_num=0; } else if(a != ' '&&a != '\n'&&a != '\t'&&a!='/') { ch_num++;}else if(a=='/'){ flag++;} }}fclose(f); printf("代碼行數:%d ",code_num-tag); } int searchfile(void) //尋找文件夾中的txt文件 { struct _finddata_t filefind; long handle; int t=0;if( (handle=_findfirst( "d:\\wordcount\\*txt", &filefind)) == -1L ) { printf( "沒找到txt文件\n"); } else do{ t++; printf("找到文件:%s\n", filefind.name); }while (_findnext(handle,&filefind)==0);_findclose(handle);printf("txt文件數量:%d\n",t); return 0; }
?
三:單元測試
由于本次項目采用傳統的C語言,就沒有很好的工具可供使用。于是我們就手寫了部分功能的單元測試(單元測試大同小異,選了幾個單元進行測試)。
首先是字符數統計的測試
int countc(char *file); int main () {FILE *fpt;char filename[30];printf("輸入測試文件\n");scanf("%s",&filename) ;fpt=fopen(filename, "rb");countc(filename);return 0;}
輸入正確的txt文件名,輸出結果如下
然后是注釋行統計的測試
int count_noteline(char *file); int main () {FILE *fpt;char filename[30];printf("輸入測試文件\n");scanf("%s",&filename) ;fpt=fopen(filename, "rb");count_noteline(filename);return 0;}
同樣,測試結果如下
?
四:總結
通過這次的結隊編程合作,了解到了在團隊合作時應該具備的基本素質,需要和隊友及時溝通,完成代碼的結合配對。同時本次過程中對WordCount的功能有了更加全面的了解與掌握,也對單元測試有了更深的了解。
?
轉載于:https://www.cnblogs.com/WLYW/p/9826403.html
總結
以上是生活随笔為你收集整理的WordCount扩展与优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 琳达琳达琳达是什么歌啊
- 下一篇: 使用appium做自动化测试时,send