WordCount 统计行数、字符数、单词数

一、作业要求:

系统分析与设计课程个人项目作业 

二、代码地址:

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

三、PSP表格
PSP阶段预估耗时(分钟)实际耗时(分钟)
计划 100 160
估计这个任务需要多少时间 100 140
开发 100 120
需求分析 3030 
生成设计文档 2020 
设计复审 3030 
代码规范 2020 
具体设计 3030 
具体编码 4040 
代码复审 3030 
测试 1020 
报告 2020 
测试报告 2020 
计算工作量 1020
事后总结 2020 
合计 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

 

转载于:https://www.cnblogs.com/psps/p/9695450.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值