编码用命令行执行的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 统计文件总行数
由于时间安排不妥当,导致此次编程周期不长,所以具体功能都没有细化,下面附上代码,个人感觉最大的亮点就是命令行执行代码,话不多说,贴代码,发效果图,睡觉!
执行效果:
[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]
通过写这个命令行程序,我意识到以前接触的东西实在太少,困在一个小圈子里不敢出去,以后必须去接触更多的东西,切不可坐井观天。
相关文章推荐
- 整理一些C++面试容易被问到的问题及其答案
- C++混合编程之idlcpp教程Python篇(2)
- C++ STL中map.erase(it++)用法原理解析
- C\C++代码优化的27个建议
- 【C++ STL学习与应用总结】目录
- c++的类的理解
- 错误:“LNK1169找到一个或者多个重定义的符号”
- 深入理解C指针学习笔记(一)
- 一起talk C栗子吧(第一百二十七回:C语言实例--查看main函数的参数)
- 在ubuntu下使用emacs对c++程序进行调试
- C安全编码--预处理
- c++作业2
- 值得阅读的C语言开源项目代码
- C语言中的指针和内存泄漏
- C语言实现泛型编程
- C语言实现多态
- C标准库<assert.h>实现
- 【poj 3009】Curling 2.0 中文题意&题解&代码(C++)
- 探索c++对象模型
- 递归与尾递归(C语言)