软件工程实践小项目之模拟wc.exe的小程序
github源码和工程文件地址:https://github.com/Jackchenyu/Word_counts/tree/smart
基本要求:要实现wc的基本功能即文件中字符数、单词数、行数的统计。
主要功能:文件中字符数、单词数、行数的统计和注释行统计。
设计思想:将文件中的一行字符读完来统计行数,然后运用字符数组再去分别统计字符数和单词数。
程序代码:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int c=0;
int w=0;
int l=0;
int i=0;
void calculate(char * filename)
{
FILE * fp;
char a;
if((fp=fopen(filename,"r"))==NULL)
{
printf("%s 读取失败!\n",filename);
exit(-1);
}
while(!feof(fp)) //设置循环,同时判断是否到达文件尾或者发生错误;
{
a=fgetc(fp); //从文件中读取一个字符;
if(a!=' '&&a!='\n'&&a!='\t'&&a!=','&&a!='.'&&a!='!'&&a!=';'&&a!='=')
c++;
if(a==' '||a=='\n'||a=='\t'||a==','||a=='.'||a=='!'||a=='='||a==';')
w++;
if(a=='\n'||a=='\t')
l++;
}
l++;
c--;
fclose(fp);
}
int readData(char *filename) //此函数计算英文单词个数
{
FILE* fp;
char ch;
char flag = 0;
int num=0;
if((fp = fopen(filename,"r")) == NULL)
{
printf("%s 读取失败!",filename);
exit(EXIT_FAILURE);
}
printf("%s 读取成功!!!\n",filename);
while(!feof(fp)) //设置循环,同时判断是否到达文件尾或者发生错误;
{
ch = fgetc(fp); //从文件中读取一个字符;
if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))
flag = 0;
else if(flag == 0 && (ch != '-' && ch != '/'&& ch != '\''))
{
num++;
flag = 1;
}
}
fclose(fp);
return num;
}
int main(int argc, char* argv[])
{
FILE *fp;
calculate(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"))
printf("File:%sCharNum:%d\n",argv[2],c);
else if(!strcmp(argv[1],"-w"))
printf("File:%sWordNum:%d\n",argv[2],w);
else if(!strcmp(argv[1],"-l"))
printf("File:%sLineNum:%d\n",argv[2],l);
else if(!strcmp(argv[1],"exit"))
{
printf("Exit!\n");
break;
}
else
printf("NullPoint\n");
printf("\n\n");
scanf("%s%s%s",argv[0],argv[1],argv[2]);
}
return 0;
}
代码借鉴于:http://www.cnblogs.com/changjiangcheng/p/5304120.html
在源码上实现了返回当前目录、子目录所有.c文件的代码行数,空行数,注释行数;在源码的基础上我增加了计算单词个数和计算字符个数这两个功能:“readWord();”“readChar();”
如果有什么不对的地方请多多指教。
软件工程实践小项目之模拟wc.exe的小程序的更多相关文章
- 个人项目作业(wc.exe)
1.GitHub项目地址 https://github.com/QiuBin666/WC 项目介绍: 题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行 ...
- 个人小项目——Java实现WC功能
这个小项目用了两种方法解决了该功能的实现. 1.两种方法的功能和具体实现 代码可以成功运行,但是有一些情况考虑不完整,一种方法用了FileOutputStream输出流,为了解决空格无法统计问题,对文 ...
- 个人项目:实现wc.exe(Java)
本项目Github地址:https://github.com/NNewBoy/wc 项目相关要求 基本功能:(已实现) -c 统计文件字符数 -w 统计文件词的数目 -l 统计文件行数 扩展功能:(已 ...
- 个人项目(WC.exe)(java)(基于图形界面)
一.Github项目地址:https://github.com/Leungdc/ENhomework 二.PSP: PSP2.1 Personal Software Process Stages 预估 ...
- wc.exe指令(C++)
https://github.com/kielingpao/wc 项目相关要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.ex ...
- Java小项目--坦克大战(version1.0)
Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...
- python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)
''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_ ...
- 个人项目 wc.exe
GitHub地址:https://github.com/oAiuo/wordCount 一.题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行单元测试. ...
- 个人项目作业——wc.exe
一.Github项目地址 https://github.com/PIPIYing/wc 二.项目概况 项目描述 Word Count 1. 实现一个简单而完整的软件工具(源程序特征统计程序). 2. ...
随机推荐
- 【2019年03月29日】股票的滚动市盈率PE最低排名
仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 深康佳A(SZ000016) - 滚动市盈率PE:2.51 - 滚动市净率PB:1.68 - 滚动年化股息收益率:2.9% - - - ...
- 《转》循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论
转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/arti ...
- JS中实现种子随机数
参数: 详谈JS中实现种子随机数及作用 我在Egret里这么写... class NumberTool{ /**种子(任意默认值5)*/ public static seed:number = 5; ...
- Mesos和Docker的集成
摘要: 众所周知,Mesos全面支持Docker.但是这意味着什么呢?在命令行里运行docker run...就可以使用Docker了.还需要做什么?让我们一起研究下Mesos的高级特性——和Dock ...
- PHP版本MS17-010检测小脚本
内网渗透的时候有点用处,可以检测MS17-010的漏洞并获取操作系统信息,配合BURP可批量检测,纯socket发包,无需其他扩展. <?php //根据巡风python代码翻译成PHP代码 / ...
- Spring AOP 随记
本周经历各种面试失败后,最后一站张建飞老大的阿里,感觉有着这般年纪不该有的垃圾履历而忧伤中,不过还是要继续加油的,毕竟他说的好,都是经历,无愧初心. 所以为了更加深入理解Spring AOP我又翻起了 ...
- Trait基础
Trait基础 在Scala中,Trait是一种特殊概念.首先,Trait可以被作为接口来使用,此时Trait与Java的接口非常类似.同时在Trait可以定义抽象方法,其与抽象类中的抽象方法一样,不 ...
- thinkphp 百度地图Api坐标计算 A坐标距离B坐标多少公里 并按照距离近的排序 坐标排序 外部字段排序
感谢我磊哥 函数封装方法: //计算距离 /* **$a 可多数坐标 就是可数组类型的 ***$b 是登录者的坐标 ***ps: lat经度 lng纬度 经度在前纬度在后 *** ***/ funct ...
- c++求最小公倍数和最小公约数
方法一:辗转相除法(欧几里得 Euclidean) 用“较大数”除以“较小数”,再用较小数除以第一余数,再用第一余数除以第二余数: 反复直到余数为零为止. #include<iostream&g ...
- python-颜色显示
格式:\033[显示方式;字体色;背景色m......[\033[0m] ------------------------------------------- 字体色 | 背景色 | 颜色描述 -- ...