软件工程第一次作业(wc的c语言实现)
GitHub地址:https://github.com/N1Yoo/-
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
20 |
15 |
· Estimate |
· 估计这个任务需要多少时间 |
15 |
10 |
Development |
开发 |
400 |
300 |
· Analysis |
· 需求分析 (包括学习新技术) |
70 |
80 |
· Design Spec |
· 生成设计文档 |
30 |
30 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 |
30 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
15 |
15 |
· Design |
· 具体设计 |
50 |
40 |
· Coding |
· 具体编码 |
60 |
60 |
· Code Review |
· 代码复审 |
30 |
30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
60 |
Reporting |
报告 |
50 |
50 |
· Test Report |
· 测试报告 |
30 |
20 |
· Size Measurement |
· 计算工作量 |
10 |
20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
10 |
合计 |
|
870 |
770 |
一.项目要求
-
wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。具体功能要求:
需求模式: wc.exe [parameter] [file_name]
- 基本功能 (完成)
wc.exe -c file.c //返回文件 file.c 的字符数
wc.exe -w file.c //返回文件 file.c 的词的数目
wc.exe -l file.c //返回文件 file.c 的行数
- 扩展功能(未完成)
-s 递归处理目录下符合条件的文件。 (未完成)
-a 返回更复杂的数据(代码行 / 空行 / 注释行)。 (已完成)
- 高级功能(未完成)
-x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。
1.采用c语言实现
2.Charcount,将文件中的字符逐一提取,判断其ascii码是否在33~126中,是,则char+1
3.Wordcount,当读取到字符为字母或者数字时,进入循环,直到读取到非字母和数字,打断循环,word+1
4.Linecount,当读取到‘\n'时,代表换行,line+1
1 int main(int argc, char *argv[]) //主函数,选择功能 2 { 3 FILE *fp; 4 int c; 5 int w; 6 int l; 7 8 9 10 if( !strcmp (argv[1], "-c") ) 11 { 12 c = CharCount(argv[2]); 13 printf("文件:%s 字符数:%d\n", argv[2], c ); 14 } 15 16 17 else if( !strcmp (argv[1], "-w") ) 18 { 19 w = WordCount(argv[2]); 20 printf("文件:%s 词数:%d\n", argv[2], w ); 21 } 22 23 24 else if( !strcmp (argv[1], "-l") ) 25 { 26 l = LineCount(argv[2]); 27 printf("文件:%s 行数:%d\n", argv[2], l ); 28 } 29 30 else printf("您的输入有误,请重新输入。"); 31 return 0; 32 }
2.CharCount函数,统计字符,fgetc()逐一提取文件字符
int CharCount(char *file)//字符统计函数 { FILE *fp; int i; int c=0; fp=fopen(file,"r"); i=fgetc(fp); if (fp==NULL) { printf("文件不存在,请重新输入"); exit(1); } while(i!= EOF) { if( i >= 33 && i <= 126 ) c++; i=fgetc(fp); } fclose(fp); return c; }
3.WordCount函数,统计单词
int WordCount(char *file)//单词统计函数 { FILE *fp; int i; int w=0; fp=fopen(file,"r"); i=fgetc(fp); if (fp==NULL) { printf("文件不存在,请重新输入"); exit(1); } while(i!=EOF) { if( (i >= 'a' && i <= 'z') || (i >= 'A' && i<= 'Z') || (i >= '0' && i <= '9') ) { while( (i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9') || i == '_' ) { i = fgetc(fp); } w++; } i=fgetc(fp); } fclose(fp); return w; }
4.LineCount函数,统计行数
int LineCount(char *file)//行数统计函数 { FILE *fp; int i; int l=0; fp=fopen(file,"r"); i=fgetc(fp); if (fp==NULL) { printf("文件不存在,请重新输入"); exit(1); } while(i!= EOF) { if( i=='\n' ) l++; i=fgetc(fp); } fclose(fp); return l; }
四、运行测试:
1.要检测的txt文本
2.运行结果
五、项目小结:
在本次的作业中,让我获益良多,我学会了github的使用,并且弄明白了c语言中对文件的输出与输入等操作但是由于很久没有运用c语言所以生疏了,忘记了很多知识,希望在接下来的学习中继续努力。