编码用命令执行的C语言词语统计程序
需求介绍
程序处理用户需求的模式为:
- wc.exe [parameter][filename]
在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下:
1、基本功能
- 支持 -c 统计文件字符数
- 支持 -w 统计文件单词数
- 支持 -l 统计文件总行数
2、拓展功能
- 支持 -a 返回高级选项(代码行 空行 注释行)
- 支持 -s 递归处理符合条件的文件
3、高级功能
- 支持 -x 程序以图形界面与用户交互
[filename] 是待处理文件名。
设计历程及感想
初次看到这个题目,真的是一头雾水,因为以前编译代码都是用编译器直接编译的,而这次要求写一个命令行程序,于是,我找到了度娘,度娘告诉我,main函数的参数
int argc, char* argv[]可以帮到你,通过阅读相关文档,我对其有了大致了解:
argc这个整形数据用来保存后面字符串argv的空间大小,而argv则用来保存命令行的输入数据。
明白了这些,思路顿时打开了,这个题目要求的无非是从命令行向main函数里输入控制参数,从而达到按条件计数的效果
基本功能
- 支持 -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);
}

执行效果:

感想篇
通过写这个命令行程序,我意识到以前接触的东西实在太少,困在一个小圈子里不敢出去,以后必须去接触更多的东西,切不可坐井观天
编码用命令执行的C语言词语统计程序的更多相关文章
- 编码用命令行执行的C语言词语统计程序
需求介绍 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c ...
- [转]Windows中的命令行提示符里的Start命令执行路径包含空格时的问题
转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...
- 转:Windows中的命令行提示符里的Start命令执行路径包含空格时的问题
转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...
- [fw]Linux系统使用time计算命令执行的时间
Linux系统使用time计算命令执行的时间 当测试一个程序或比较不同算法时,执行时间是非常重要的,一个好的算法应该是用时最短的.所有类UNIX系统都包含time命令,使用这个命令可以统计时间消耗.例 ...
- R语言如何将字符串转变为命令执行
这里用到 eval() 和 parse() 函数.首先使用 parse() 函数将字符串转化为表达式(expression),而后使用 eval() 函数对表达式求解.x <- 1:10a &l ...
- (大数据工程师学习路径)第一步 Linux 基础入门----命令执行顺序控制与管道
介绍 顺序执行.选择执行.管道.cut 命令.grep 命令.wc 命令.sort 命令等,高效率使用 Linux 的技巧. 一.命令执行顺序的控制 1.顺序执行多条命令 通常情况下,我们每次只能在终 ...
- 【技巧总结】Penetration Test Engineer[3]-Web-Security(SQL注入、XXS、代码注入、命令执行、变量覆盖、XSS)
3.Web安全基础 3.1.HTTP协议 1)TCP/IP协议-HTTP 应用层:HTTP.FTP.TELNET.DNS.POP3 传输层:TCP.UDP 网络层:IP.ICMP.ARP 2)常用方法 ...
- Bash脚本编程之变量与多命令执行
变量基础知识 程序由指令加数据所组成,而变量可以理解为数据来源的一种. 变量名可以理解为指向了某个内存空间的地址,对于变量的赋值可理解为向内存空间写入数据,对于变量的引用可理解为从内存空间读取数据. ...
- [WEB安全]代码/命令执行总结
0x01 代码执行 1.1 概念 远程代码执行实际上是调用服务器网站代码进行执行. 1.2 常见执行方法 eval eval():将字符串当做函数进行执行(需要传入一个完整的语句) demo: < ...
随机推荐
- Scala学习之路 (一)Scala的安装
1.Scala下载 版本选择,看spark官网 http://spark.apache.org/docs/latest/ spark2.3.0版本是用2.11版本的Scala进行开发的,所以此处下载S ...
- helm 部署
Helm 基本概念 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共享和使用为Kubernetes构建的应用,它包含几个基本概念 Chart:一个 Helm 包,其中包含了 ...
- linux 的常用命令---------第二阶段
vim编辑器 vim 文件名(首先进入命令模式) :(进行编辑文件内容) → 按 i 键进入插入模式,可以写内容啦. ↓ 按 Esc 键,进入命令模式 ↓ 按 shift + : 键,进入末行模式 ...
- OpenCV——归一化函数normalize
函数原型: void cv::normalize(InputArry src,InputOutputArray dst,double alpha=1,double beta=0,int norm_ty ...
- Vue 下拉列表 组件模板
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Android 绘图时实现双缓冲
一.双缓冲技术原理: 在内存中创建一片内存区域,把将要绘制的图片预先绘制到内存中,在绘制显示的时候直接获取缓冲区的图片进行绘制.更具体一点来说:先通过setBitmap方法将要绘制的所有的图形绘制到一 ...
- 20155318 《网络攻防》Exp3 免杀原理与实践
20155318 <网络攻防>Exp3 免杀原理与实践 基础问题 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程 ...
- C# 获取汉字拼音首字母/全拼
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...
- [arm学习]makefile学习总结
makefile不仅仅是一个命令的集合体,其中有一些规则是需要理解掌握的. 首先,了解makefile的规则: //-----------格式---------- 目标 : 依赖1,依赖2 (TAP键 ...
- python 翻转棋(othello)
利用上一篇的框架,再写了个翻转棋的程序,为了调试minimax算法,花了两天的时间. 几点改进说明: 拆分成四个文件:board.py,player.py,ai.py,othello.py.使得整个结 ...