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语言相关知识,同时增进了自己对软件开发流程的理解