您的位置:首页 > 编程语言 > C语言/C++

编码用命令行执行的C语言词语统计程序

2016-03-21 22:32 363 查看
[b]需求介绍[/b]

程序处理用户需求的模式为:

wc.exe [parameter][filename]

在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下:

1、基本功能

支持 -c 统计文件字符数

支持 -w 统计文件单词数

支持 -l 统计文件总行数

2、拓展功能

支持 -a 返回高级选项(代码行 空行 注释行)

支持 -s 递归处理符合条件的文件

3、高级功能

支持 -x 程序以图形界面与用户交互

[filename] 是待处理文件名。

[b]设计历程及感想[/b]

  初次看到这个题目,真的是一头雾水,因为以前编译代码都是用编译器直接编译的,而这次要求写一个命令行程序,于是,我找到了度娘,度娘告诉我,main函数的参数

int argc, char* argv[]可以帮到你,通过阅读相关文档,我对其有了大致了解:

argc这个整形数据用来保存后面字符串argv的空间大小,而argv则用来保存命令行的输入数据。

明白了这些,思路顿时打开了,这个题目要求的无非是从命令行向main函数里输入控制参数,从而达到按条件计数的效果

[b]基本功能[/b]

支持 -c 统计文件字符数

支持 -w 统计文件单词数

支持 -l 统计文件总行数

由于时间安排不妥当,导致此次编程周期不长,所以具体功能都没有细化,下面附上代码,个人感觉最大的亮点就是命令行执行代码,话不多说,贴代码,发效果图,睡觉!

#include "stdafx.h"
#include "string.h"
#include "stdlib.h"

void Count(char * file);
int Zicount=0;
int Wordcount=0;
int Hangcount=0;

int main(int argc, char* argv[])               //argv[1]保存指令,argv[2]保存文件路径
{
FILE *fp;
Count(argv[2]);
while(1)
{
if((fp=fopen(argv[2],"r"))==NULL)
{
printf("该文件不存在!\n\n\n");
scanf("%s%s%s",argv[0],argv[1],argv[2]);
continue;
}
else if(strcmp(argv[1],"-c")==0)                   //统计文件字符数
printf("文件%s字符数为:%d\n",argv[2],Zicount);
else if(strcmp(argv[1],"-w")==0)                   //统计文件单词数
printf("文件%s单词数为:%d\n",argv[2],Wordcount);
else if(strcmp(argv[1],"-l")==0)                  //统计文字总行数
printf("文件%s总行数为%d\n",argv[2],Hangcount);
//        else if(strcmp(argv[1],"-a")==0)                   //返回高级选项
//            printf("4\n");
//        else if(strcmp(argv[1],"-s")==0)                   //递归处理符合条件的文件
//            printf("5\n");
else if(strcmp(argv[1],"exit")==0)
{
printf("程序结束!\n");
break;
}
else
printf("该指令不存在,请重新输入\n");
printf("\n\n");
scanf("%s%s%s",argv[0],argv[1],argv[2]);
}
return 0;

/*
char a[20];
strcpy(a,"haha.txt");
Count(a);
printf("%d\n%d\n%d\n",Zicount,Wordcount,Hangcount);
return 0;
*/
}

void Count(char * file)
{
FILE * fp;
char a;
if((fp=fopen(file,"r"))==NULL)
{
printf("读文件失败!\n");
exit(-1);
}
while(!feof(fp))
{
a=fgetc(fp);

if(a!=' '&&a!='\n'&&a!='\t'&&a!=','&&a!='.'&&a!='!'&&a!=';'&&a!='=')
Zicount++;
if(a==' '||a=='\n'||a=='\t'||a==','||a=='.'||a=='!'||a=='='||a==';')
{
if(a=='=')                   //解决==
Wordcount--;
Wordcount++;
}
if(a=='\n'||a=='\t')
Hangcount++;
}
Zicount--;          //at end of the file,Zicount will add
Hangcount++;        //can't recognize the last line
fclose(fp);
}


执行效果:



[b]感想篇[/b]

  通过写这个命令行程序,我意识到以前接触的东西实在太少,困在一个小圈子里不敢出去,以后必须去接触更多的东西,切不可坐井观天。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: