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