Wordcount
一:
合作者: 201631062614 ; 201631062608
代码地址:https://gitee.com/chengsh/word.git
本次作业的链接地址:https://edu.cnblogs.com/campus/xnsy/Test/homework/2203
二:解题思路
刚拿到这个作业时,脑子里完全是懵的,不知道从何处入手。通过从网上查找资料,发现在CSDN和博客园里有许多关于Word Count的例子,通过学习和下载一些源码,我们逐渐有了思路。最后经过讨论,决定用所熟悉的C语言编写Word Count。
三:实现的功能
3.1基本功能
wordcountc.exe -c //返回文件的字符数
wordcountc.exe -w //返回文件的单词总数
wordcountc.exe -l //返回文件的总行数
3.2扩展功能
wordcountc.exe -a //返回更复杂的数据(代码行 / 空行 / 注释行)
其中,
代码行:本行包括多于一个字符的代码。
空 行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。
注释行:本行不是代码行,并且本行包括注释。
四:主要相关代码如下:
4.1//统计字符个数
1 int CodeCount(char *Path) { //计算字符个数
2
3 FILE *file = fopen(Path, "r");
4 assert(file != NULL); //若文件不存在则报错
5
6 char code;
7 int count = 0;
8
9 while ((code = fgetc(file)) != EOF) //读取字符直到结束
10 count+= ((code != ' ') && (code != '\n') && (code != '\t')); //判断是否是字符
11
12 fclose(file);
13
14 return count;
15 }
4.2//统计单词数
1 int WordCount(char *Path) { //计算单词个数
2
3 FILE *file = fopen(Path, "r");
4 assert(file != NULL);
5
6 char word;
7 int is_word = 0; //用于记录字符是否处于单词中
8 int count = 0;
9
10 while ((word = fgetc(file)) != EOF) {
11 if ((word >= 'a' && word <= 'z') || (word >= 'A' && word <= 'Z')) { //判断是否是字母
12 count += (is_word == 0);
13 is_word = 1; //记录单词状态
14 }
15 else
16 is_word = 0; //记录不处于单词状态
17 }
18 fclose(file);
19
20 return count;
21 }
4.3//统计行数
1 int LineCount(char *Path) { //计算行数
2
3 FILE *file = fopen(Path, "r");
4 assert(file != NULL);
5
6 char *s = (char*)malloc(200 * sizeof(char));
7 int count = 0;
8
9 for (; fgets(s, 200, file) != NULL; count++); //逐次读行
10
11 free(s);
12 fclose(file);
13
14 return count;
15 }
4.4//主函数
1 int main(int argc, char *argv[]) {
2
3 char Path[100] = "*.txt"; //默认参数
4 char Type = 's';
5 char Type2;// = 'a';
6 char userput;
7 //scanf("%c",&userput);
8 for(;scanf("%c",&userput);userput=='c'||userput=='w'||userput=='l'||userput=='a')
9 {
10 Type2=userput;
11 if (argv[1]) { //有输入参数则以输入为准
12 Type = *(argv[1] + 1);
13 if (Type == 's') {
14 Type2 = *(argv[2] + 1);
15 strcpy(Path, argv[3]);
16 }
17 else
18 strcpy(Path, argv[2]);
19 }
20
21 Run(Type, Type2, Path); //调用启动函数
22 printf("\n");
23 }
24
25 getchar();
26
27 return 0;
28 }
五:相关截图






六:等价类分析
| 有效等价类 | 无效等价类 |
|
(1)字符串(-c,-w,-l,-a,)
|
(2)其他字符串 |
| 测试用例 | 覆盖等价类 | 运行结果 |
| -w | (1) | 有效 |
| -c | (1) | 有效 |
| -l | (1) | 有效 |
| -a | (1) | 无效 |
| -(空格) | (2) | 无效 |
| -3 | (2) | 无效 |
七:总结
本次项目开发提高了自己和搭档的默契度,增强了自己阅读别人代码的理解能力和灵活引用手段。即便如此,自己平时练习不足的短板非常清晰的暴露出来,编写代码的能力不足,思路不清晰,严重影响力我们的开发速度。
对于C语言的测试方法,除了静态检验代码,我们还尝试运用FlawFinder工具进行单元测试,遗憾的是,对于此工具不够熟悉,未能达到理想目标。
本次开发实验,使我们学会了使用博客园和Gitee的使用,锻炼了项目记录的能力。
正如老师所说的,不积跬步无以成江海,每天50行的代码就会让我们不断进步,自己要在以后的生活中坚持学习计划,不断努力。
浙公网安备 33010602011771号