WordCount:C语言实现

项目地址:https://github.com/m8705/WordCount

 

项目要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。

这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

 

基本功能列表:(已完成)

wc.exe -c file.c     //返回文件 file.c 的字符数
wc.exe -w file.c    //返回文件 file.c 的词的数目  
wc.exe -l file.c      //返回文件 file.c 的行数

扩展功能:(未完成)
    -s   递归处理目录下符合条件的文件。
    -a   返回更复杂的数据(代码行 / 空行 / 注释行)

高级功能:(未完成)

   -x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

 

PSP

PSP2.1预计耗时实际耗时
总体计划 2h 1.5h
预计完成 10h 12h
程序开发 8h 8h
需求分析 0.5h 0.2h
设计文档 0.5h 0.3h
设计复审 0.5h 0.5h
代码规范 0.5h 0.5h
具体设计 1h 1h
具体编码 6h 6h
代码复审 1h 2h
程序测试 2h 2h
程序报告 1h 1h
测试报告 1h 1h
计算工作量 0.5h 0.5h
事后总结 2.5h 2.5h
总计时间 12h 13.5h

 

 

解题思路

用C语言Main函数接收参数,对参数进行判断,分别采用不同的方式统计数量即可。

 

代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <ctype.h>
 4 int main(int argc, char *argv[])
 5 {
 6     
 7     /*
 8         printf("main函数收到了%d个参数\n",argc);//第一个参数默认是可执行文件本身,第二个参数开始是接受到的参数
 9         int i;
10         for( i = 0; i < argc; i++ ){
11             printf("%s ",argv[i]);    
12         }
13         printf("\n");
14     */
15 
16     if( argc == 3 ){
17             
18         //打印接受到的参数
19         /*
20             int i;
21             printf("收到的外部参数:");
22             for( i = 1; i < argc; i++ ){
23                 printf("%s ",argv[i]);    
24             }
25             printf("\n");
26         */
27         
28         //尝试读取文件的内容
29         char data;
30         FILE *fp = fopen(argv[2],"r");
31         
32         if(!fp){
33             printf("错误:文件读取失败\n");
34             return -1;
35         }        
36         
37         //对参数进行判断
38         
39         
40         if( !strcmp(argv[1],"-c") ){//字符数
41             char temp;
42             int num = 0;
43             temp = fgetc(fp);
44             while( temp != EOF ){
45                 //putchar(temp);
46                 temp = fgetc(fp);
47                 num++;
48             }
49             printf("该文本文件的字符数为:%d\n",num);
50             
51         }
52         else if( !strcmp(argv[1],"-w") ){//单词数
53             int w = 0;
54             char a = fgetc(fp);
55             while( a != EOF){
56                 if( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='0' && a <='9') ){
57                     while( (a >='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='0' && a <='9') )
58                         a =fgetc(fp);
59                     w++;
60                     a =fgetc(fp);
61                     
62                 }
63                 else
64                     a =fgetc(fp);
65             }
66             printf("该文本文件的单词数为:%d\n",w);
67             
68         }
69         else if( !strcmp(argv[1],"-l") ){//行数
70             char temp;
71             int num = 1;
72             temp = fgetc(fp);
73             while( temp != EOF ){
74                 
75                 //putchar(temp);
76                 if(temp == '\n'){//字符需要用单引号扩住
77                     num++;
78                 }
79                 temp = fgetc(fp);
80                 
81                 
82             }
83             printf("该文本文件的行数为:%d\n",num);
84     
85         }
86         else{
87             printf("错误:参数超出范围!\n");
88             printf("允许参数:-c,-w,-l\n");
89         }
90         int n=fclose(fp);
91     }
92     else{
93         printf("错误:运行参数必须要3个\n");
94         printf("用法:wc.exe [parameter] [file_name]\n");
95     }
96     system("pause");
97     return 0;
98 }

 

运行结果

小结

通过这个项目,我复习了C语言相关知识,同时增进了自己对软件开发流程的理解

posted @ 2018-09-14 20:05  wth  阅读(614)  评论(0编辑  收藏  举报