WordCount的实现

Posted suren-945

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WordCount的实现相关的知识,希望对你有一定的参考价值。

 

Gitee

链接:https://gitee.com/YiKeYingHuaShu/codes/xmeyf6r8uq7pksbl0a1to52

基本功能:(已完成)

wc.exe -c file.c //返回文件 file.c 的字符数

wc.exe -w file.c //返回文件 file.c 的单词总数

wc.exe -l file.c //返回文件 file.c 的总行数

wc.exe -o outputFile.txt file.c //将结果输出到指定文件outputFile.txt

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

高级功能:(未完成)

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

psp2.1  psp阶段

 估计耗时(分钟)

 实际耗时(分钟)
Planning  计划  1h  45min
 · Estimate  · 估计这个任务需要多少时间  1h 55min
Development  开发 2h  90min
 · Analysis  · 需求分析 (包括学习新技术)  3h  120min
 · Design Spec  · 生成设计文档  2h  70min
 · Design Review  · 设计复审 (和同事审核设计文档)  1h  50min
 · Coding Standard  · 代码规范 (为目前的开发制定合适的规范)  0.5h  30min
 · Design  · 具体设计  1h  50min
 · Coding  · 具体编码  3h  120min
 · Code Review  · 代码复审  0.5h  50min
 · Test  · 测试(自我测试,修改代码,提交修改)  2h  120min
Reporting  报告  1h  70min
 · Test Report  · 测试报告  0.5h  40min
 · Size Measurement  · 计算工作量  0.1h  5min

 · Postmortem & ProcessImprovement Plan

 · 事后总结, 并提出过程改进计划  0.2h  25min
   合计  18.8h 850min

 

解题思路:起初对这个wordcount是模糊的,甚至不知从何下手。随后,认认真真地阅读文档要求,参考一些文献,请求同学帮助之后,才能完成我的作业。

代码

 1 //读取文件
 2 int num,w,num1;
 3 if(argc==3)
 4 {
 5 FILE *fp = fopen(argv[2],"r");
 6 if(!fp)
 7 {
 8 printf("文件打开失败!!!
");
 9 return -1;
10 } 
if( !strcmp(argv[1],"-c"))
{
//字符数
char temp;
num = 0;
temp = fgetc(fp);
while(temp!=EOF)
{
temp = fgetc(fp);
num++;
}
printf("该文本文件的字符数为:%d
",num);
fprintf(fp,"%d",num);    
}
 if(!strcmp(argv[1],"-w"))
{
//单词数
 w=0;
char a=fgetc(fp);
//对是否是单词进行判断
while(a!=EOF)
{
if((a>=a && a <=z) || ( a >=A && a <=Z) || ( a >=0 && a <=9))
{
while((a>=a && a <=z) || ( a >=A && a <=Z) || ( a >=0 && a <=9))
a =fgetc(fp);
w++;
a =fgetc(fp);

}
else
a =fgetc(fp);
}
printf("该文本文件的单词数为:%d
",w);
fprintf(fp,"%d",w);

}
if( !strcmp(argv[1],"-l") )
{
//行数
char temp;
num1 = 1;
temp = fgetc(fp);
while(temp != EOF )
{
//putchar(temp);
if(temp == 
)
{
//字符需要用单引号扩住
num1++;
}
temp = fgetc(fp);
}
printf("该文本文件的行数为:%d
",num1);
fprintf(fp,"%d",num1);
}
if(!strcmp(argv[1],"-o"))
{
if(argc==3)
{

//以只写方式打开文件。
FILE *fp1= fopen(argv[1],"w");
if(!fp)
{
printf("文件打开失败!!!
");
return -1;
}

//根据提示,依次输入到指定文件。
printf("字符数,单词数,行数:
");
scanf("%d %d %d",&num,&w,&num1);
fprintf(fp1,"该文本文件的字符数为:%d
",num);
fprintf(fp1,"该文本文件的单词数为:%d
",w);
fprintf(fp1,"该文本文件的行数为:%d
",num1);
fclose(fp1);
}

}
//1.参数过大
else{
printf("error:参数超出范围!!
");
printf("允许参数:-c,-w,-l,-o
");
}
int n=fclose(fp);
}


//2.对参数数目进行判断。
else{
printf("error:运行参数必须要3个!!
");
printf("use:jjj.exe [parameter] [file_name]
");
}
//暂停运行。

system("pause");

运行截图

 

测试用例

技术分享图片

技术分享图片

 

 技术分享图片

 

 

 技术分享图片

技术分享图片技术分享图片

 

技术分享图片

 

 

 

 

 

 

 

 

总结:用c语言完成的作业。还有很多不足之处,就是因为平时积累的编程经验太少了,导致很多时候在做无用功。写了一个PSP表格,对自己的这个项目进行了大致的评估。但是时间远远超出预算。说明我的专业技能还有待加强。

 

 



以上是关于WordCount的实现的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop- Wordcount程序原理及代码实现

wordcount代码实现详解

WordCount代码实现及测试

软件工程作业二:WordCount实现与改进

修改hadoop自带的wordcount代码,实现输出指定单词及其数量

WordCount程序