[gitee地址] (https://gitee.com/little-baby/WordCount-by-C )
WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
PSP2.1 | PSP阶段 | 预估耗时(分钟) | 实际耗时(分钟 ) |
---|---|---|---|
Planning | 计划 | 100 | 55 |
Estimate | 估计这个任务需要多少时间 | 60 | 30 |
Development | 开发 | 100 | 180 |
Analysis | 需求分析 (包括学习新技术) | 90 | 80 |
Design Spec | 生成设计文档 | 60 | 45 |
Design Review | 设计复审 (和同事审核设计文档) | 45 | 20 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 25 | 15 |
Design | 具体设计 | 60 | 80 |
Coding | 具体编码 | 60 | 120 |
Code Review | 代码复审 | 20 | 60 |
Test | 测试(自我测试,修改代码,提交修改) | 45 | 90 |
Reporting | 报告 | 60 | 75 |
Test Report | 测试报告 | 30 | 30 |
Size Measurement | 计算工作量 | 30 | 35 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 60 |
合计 | 815 | 975 |
-6.1 所需要解决的几个关键问题??
1).对于在命令行的读取输入,读取出输入信息
2).如何识别参数,即识别所输入的不同的参数
3).对于不同参数,如何调用调用实现所要达到的功能
-6.2 可行的几个解决方案
① 参见C语言命令行参数的使用
② 借助C语言库函数strcmp与指定的字符串进行比较
③ 由上可知,当识别出不同的参数时,直接调用不同的函数即可.
char* filename(int argc,char** arg) //返回文件名
{
int i=0;
char* name;
for(i=1;i<argc;i++)
{
if(strcmp(arg[i],"-l")&&strcmp(arg[i],"-w")&&strcmp(arg[i],"-c"))
{
return arg[i];
}
}
}
void openfile(int argc,char** arg) //打开文件
{
char *name=filename(argc,arg);
fp = fopen(name,"r");
}
void LineCount(int argc,char** arg,char* filename) //统计行数
{
char c;
openfile(argc, arg);
while(!feof(fp))
{
c=fgetc(fp);
if(c==‘\n‘)
{
hang_num++;
}
}
FILE* fp1 = fopen( filename,"a+");
fprintf( fp1,"行数%d\n",hang_num+1);
fclose(fp);
fclose( fp1 );
}
void CharCount(int argc,char** arg,char* filename) // 统计字符
{
char c;
openfile(argc, arg);
while(!feof(fp))
{
c=fgetc(fp);
if(c!=‘\n‘)
{
number++;
}
}
FILE* fp1 = fopen( filename,"a+");
fprintf( fp1,"字符数%d\n",number);
fclose(fp);
fclose( fp1 );
}
void WordCount(int argc,char** arg,char* filename ) //统计单词
{
char c;
openfile(argc, arg);
while(!feof(fp))
{
c=fgetc(fp);
if( c == ‘\n‘ || c == ‘ ‘)
{
count++;
}
}
FILE* fp1 = fopen( filename,"a+");
fprintf( fp1,"词数%d\n",number);
fclose(fp);
fclose( fp1 );
}
void handle(int argc,char** arg)
{
int i=1;
char* filename ="result.txt";
bool IshaveParameter[10]={false};
for(i = 1;i < argc; i++)
{
if(!strcmp(arg[i],"-w"))
{
IshaveParameter[0]=true;
}
else if(!strcmp(arg[i],"-c"))
{
IshaveParameter[1]=true;
}
else if (!strcmp(arg[i],"-l"))
{
IshaveParameter[2]=true;
}
}
for(i = 1;i < argc; i++)
{
if(!strcmp(arg[i],"-o"))
{
filename = arg[ i + 1 ];
}
}
for(i = 0;i < argc;i ++ )
{
if(i==0&&IshaveParameter[i]==true)
{
CharCount(argc, arg,filename);
}
else if(i==1&&IshaveParameter[i]==true)
{
WordCount(argc, arg,filename);
}
else if(i==2&&IshaveParameter[i]==true)
{
LineCount(argc, arg,filename);
}
}
}
显示顺序与输入参数的次序无关。
生成文件result.txt:
例如:
wc.exe -l -w -c file.c,则统计file.c中的字符数和行数,输出结果保存在result.txt中,内容格式如下:
基于C实现Word Count 将字符数、单词数、行数,统计结果以指定格式输出到默认文件中
原文:https://www.cnblogs.com/this-cong/p/9696790.html