简单实现wc.exe软件基本功能

软件需求分析:

一、基本功能

  1. 支持 -c  统计字符数(char count)
  2. 支持 -w  统计单词数(word count)
  3. 支持 -l  统计总行数(line count)

二、拓展功能

  1. 支持 -a 返回高级选项(代码行 空行 注释行)
  2. 支持 -s 递归处理符合条件的文件

基础功能模块:

一、实现字符数统计函数

通过传参的方式将文件名以(char *filename)的方式传入函数,利用fgets()函数或fscanf()读取一行字符串,统计个数,逐行进行累加统计字符个数。通过wc.exe -c访问Charcount()函数。

/*字符数统计函数*/
int Charcount(char *filename)
{
int n=;
fp=fopen(filename,"r");
if(fp==NULL)
{
cout<<"请在文件中添加内容"<<endl;
exit(-);
}
while(!feof(fp))
{
fscanf(fp,"%s",str);
n=n+strlen(str);
}
fclose(fp);
return n;
}

二、实现单词统计函数

通过传参的方式将文件名以(char *filename)的方式传入函数,利用fscanf()读取字符串,当读取遇到空格时记为一个单词,并且以数字开头的不计为单词,也不统计汉字。并且以wc.exe -w方式访问Wordcount()函数。

/*单词统计函数*/
int Wordcount(char *filename)
{
int n=;
fp=fopen(filename,"r");
if(fp==NULL)
{
cout<<"请在文件中添加内容"<<endl;
exit(-);
}
while(!feof(fp))
{
if(fscanf(fp,"%s",str)&&!(str[] >=''&&str[] <=''))
{
n++;
}
}
fclose(fp);
return n;
}

三、实现行数统计函数

通过传参的方式将文件名以(char *filename)的方式传入函数,利用fgetc()读取单个字符,判断当前读取字符是否为换行符,如果是换行符将行数加一。并且以wc.exe -l方式访问Linecount()函数。

/*行数统计*/
int Linecount(char *filename)
{
int n=;char ch;
fp=fopen(filename,"r");
if(fp==NULL)
{
cout<<"请在文件中添加内容"<<endl;
exit(-);
}
while(!feof(fp))
{
ch=fgetc(fp);
if(ch=='\n')
{
n++;
}
}
fclose(fp);
return n;
}

高级功能模块:

通过传参的方式将文件名以(char *filename)的方式传入函数,这里对于空行、注释行、代码行,我们分别用不同的函数来实现功能,最后用户通过wc.exe  -s-a命令来对这三个函数进行访问。统计空行函数specialcount();统计注释行函数signalcount();统计代码行函数keycount()。

/*统计注释行函数*/
void signalcount(char *filename)
{
int len=,i=;signline=;
fp=fopen(filename,"r");
if(fp==NULL)
{
cout<<"请在文件中添加内容"<<endl;
exit(-);
}
while(!feof(fp))
{
fgets(str,sizeof(str),fp);
len=strlen(str);
for(i=;i<len;i++)
{
if((str[i]=='/'&&str[i+]=='/')||(str[i]=='/'&&str[i+]=='*'))
{
signline++;
break;
}
}
}
fclose(fp);
cout<<"注释行数: SignLine="<<signline<<endl<<endl;
} /*统计空行函数*/
void specialcount(char *filename)
{
int len=,i=,flag=;
emptyline=;keyline=;
fp=fopen(filename,"r");
if(fp==NULL)
{
cout<<"请在文件中添加内容"<<endl;
exit(-);
}
while(!feof(fp))
{
flag=;
fgets(str,sizeof(str),fp);
len=strlen(str);
for(i=;i<len;i++)
{
if((str[i]=='/'&&str[i+]=='/')||(str[i]=='/'&&str[i+]=='*'))
{
flag=;
break;
}
}
if((str[] =='\n'||str[]=='}'||str[]=='{')&&(flag==))
{
emptyline++;
}
}
fclose(fp);
cout<<"空行行数: EmptyLine="<<emptyline<<endl<<endl;
} /*统计代码行函数*/
void keycount(char *filename)
{
int len=,i=;keyline=keyline-emptyline;
fp=fopen(filename,"r");
if(fp==NULL)
{
cout<<"\n请在文件中添加内容"<<endl;
exit(-);
}
while(!feof(fp))
{
fgets(str,sizeof(str),fp);
len=strlen(str);
if(len>)
{
for(i=;i<len;i++)
{
if((str[i]!='/'&&str[i+]!='/')||(str[i]!='/'&&str[i+]!='*'))
{
keyline++;
}
break;
}
}
}
fclose(fp);
cout<<"\n代码行数: KeyLine="<<keyline<<endl<<endl;
}

主函数模块:

在main()函数中我们主要实现用户交互功能以及文件建立等操作。

int main()
{
while()
{
char ch[];
cout<<"输入用户命令:wc.exe ";
scanf("%s",ch);
if(ch[]=='c')
{
cout<<"\n请输入文件位置:";
cin>>Filename;
charcount=Charcount(Filename);
cout<<"\n字符个数: CharCount="<<charcount<<endl<<endl;
}
if(ch[]=='w')
{
cout<<"\n请输入文件位置:";
cin>>Filename;
wordcount=Wordcount(Filename);
cout<<"\n单词个数: WordCount="<<wordcount<<endl<<endl;
}
if(ch[]=='l')
{
cout<<"\n请输入文件位置:";
cin>>Filename;
linecount=Linecount(Filename)+;
cout<<"\n文件行数: LineCount="<<linecount<<endl<<endl;
}
if(ch[]=='s'&&ch[]=='a')
{
cout<<"\n请输入文件位置:";
cin>>Filename;
keycount(Filename); //代码行
signalcount(Filename); //注释行
specialcount(Filename); //空行
}
}
return ;
}

总体功能测试:

对于其他类型文件进行测试。

总结:

这次是实现一个简单的字符单词统计软件,主要是对文件的操作;熟悉对于文件的各种读写操作,本次作业我基本上实现了要求的所有功能。至此本次的作业就完成了,当然也有很多的不完善的地方,在以后的实践中我会不断改进的。

简单实现wc.exe软件基本功能的更多相关文章

  1. WC.exe(基于Java实现)

    一.github地址 https://github.com/Mazin-hub/MyWC.exe.git  二.PSP表格 PSP2.1 Personal Software Process Stage ...

  2. (第三周)wc.exe—命令行实现对指定目录下文件的操作

    一.用户需求 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c ...

  3. 模仿WC.exe的功能实现--node.js

    Github项目地址:https://github.com/102derLinmenmin/myWc WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要 ...

  4. 用c语言基本实现wc.exe功能

    网址:https://github.com/3216005214/wc.exe wc项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿 ...

  5. JAVA实现WC.exe功能

    项目要求 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 具体功能要求: 程序处理用户需求的模式为: wc.exe [paramet ...

  6. 软件工程:Java实现WC.exe基本功能

    项目相关要求 GitHub地址:https://github.com/3216004716/WC 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处 ...

  7. 小白のjava实现wc.exe功能

    GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c     //返回文件 file.c 的字符数 wc.exe -w file.c    //返回文件 file. ...

  8. 个人项目 wc.exe

    GitHub地址:https://github.com/oAiuo/wordCount 一.题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行单元测试. ...

  9. 软工作业No.1。Java实现WC.exe

    网址:https://github.com/a249970271/WC WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有w ...

随机推荐

  1. 01.创建winserver2012r2+hyper-v+centos7

    1.背景 DELL poweredge T320,装的winserver2012 r2,利用自带的hyper-v安装centos7,后期主要用于spark开发. 1.1 安装winserver2012 ...

  2. Linux常用文件权限控制命令

    一,查看文件属主属组ls -l [root@localhost app]# ls -l total 302832 drwxr-xr-x. 4 lhc lhc 4096 Nov 18 16:05 apa ...

  3. 【BZOJ1002】[ZJOI2006]轮状病毒

    [BZOJ1002]轮状病毒 题面 bzoj 题解 统计个数显然直接矩阵树定理,找规律截这里 打标如下: #include <iostream> #include <cstdlib& ...

  4. 4820: [Sdoi2017]硬币游戏

    4820: [Sdoi2017]硬币游戏 链接 分析: 期望dp+高斯消元. 首先可以建出AC自动机,Xi表示经过节点i的期望次数,然后高斯消元,这样点的个数太多,复杂度太大.但是AC自动机上末尾节点 ...

  5. 关于SDK-manager中我们需要下载哪些?

    废话少说,直接看图说话…… 图片取自博客文章——链接跳转:点击跳转

  6. lua编程之协程介绍

    一,lua协程简介 协程(coroutine),意思就是协作的例程,最早由Melvin Conway在1963年提出并实现.跟主流程序语言中的线程不一样,线程属于侵入式组件,线程实现的系统称之为抢占式 ...

  7. 使用Xshell远程访问tensorboard

    在使用tensorflow时,由于本地资源的限制,一般在远程服务器上训练模型,而服务器没有图形界面,那么在训练过程中如何实时地访问tensorboard可视化数据呢? 如果服务器和本地电脑连接在同一个 ...

  8. Unity3d — — UGUI之Box Collider自适应大小

    NGUI下给Sprite/image添加collider后能自适应大小,但是在UGUI下Collider是默认在(0,0)位置,size为0 因此写了个简单的脚本,效果如下(最后附代码) 1.如下图添 ...

  9. skipfish介绍

    skipfish 开发语言:C语言 命令行扫描器 主动扫描web安全评估工具 谷歌开发 已经不再进行维护 重点关注web代码 通过两种方式进项扫描:1.字典枚举 2.递归爬网 优点:速度快.支持多路单 ...

  10. L2 Helios OPcodez

    天堂2 Helios太阳神版本 的客户端和服务端封包 *********************** Client ***********************00 SendLogOut01 Req ...