简单实现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. 【转】netty源码分析之LengthFieldBasedFrameDecoder

    原文:https://www.jianshu.com/p/a0a51fd79f62 拆包的原理 关于拆包原理的上一篇博文 netty源码分析之拆包器的奥秘 中已详细阐述,这里简单总结下:netty的拆 ...

  2. 20155237 2016-2017-2 《Java程序设计》第4周学习总结

    20155237 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 继承符合DRY原则. extends UML 多态: 继承可以复用代码, ...

  3. quartz 任务高度的动态修改

    package com.example.demo.controller; import org.quartz.*;import org.quartz.impl.StdSchedulerFactory; ...

  4. TMS320VC5509的外部中断

    1. 外部中断引脚INT0-INT4,INT2-平时是低电平,INT3-平时是高电平 2. 不过中断不支持设置上升沿和下降沿触发,中断就是中断,我估计应该是平时是高电平,然后低电平触发中断,代码比较简 ...

  5. UWP UserControl 不会自适应大小

    在一般的Page里面,我们通过VisualStateManager,可以根据窗体的宽度,来调整一些控件大小. <VisualStateManager.VisualStateGroups> ...

  6. FATAL ERROR: Tried to use mysqladmin in group......

    解决办法,#export PATH=$PATH:/usr/bin

  7. SQL Server Management Studio 键盘快捷键

    光标移动键盘快捷键 操作 SQL Server 2012 SQL Server 2008 R2 左移光标 向左键 向左键 右移光标 向右键 向右键 上移光标 向上键 向上键 下移光标 向下键 向下键 ...

  8. MYSQL 数据库结构优化

    数据库结构优化 优化数据大小 使表占用尽量少的磁盘空间.减少磁盘I/O次数及读取数据量是提升性能的基础原则.表越小,数据读写处理时则需要更少的内存,同时,小表的索引占用也相对小,索引处理也更加快速. ...

  9. .net中 多线程 笔记(基础)

    1. 在进程中可以有多个线程同时执行代码.进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把 ...

  10. 在python脚本中设置环境变量,并运行相关应用

    1. 问题 在自动化应用的时候 ,有时候环境变量与运行需要不一致.这时候有两种选择: 改变节点环境变量,使得其和运行需求保持一致: 在自动化脚本中设置环境变量,其范围只在脚本运行环境中有效. 显然,当 ...