#include <stdio.h>

#include <string.h>

int *getCharNum(char *filename, int *totalNum);

int main(){

char filename[30];

// totalNum[0]: 总行数  totalNum[1]: 总字符数  totalNum[2]: 总单词数

int totalNum[3] = {0, 0, 0};

printf("Input file name: ");

scanf("%s", filename);

if(getCharNum(filename, totalNum)){

printf("Total: %d lines, %d words, %d chars\n", totalNum[0], totalNum[2], totalNum[1]);

}else{

printf("Error!\n");

}

return 0;

}

/**

* 统计文件的字符数、单词数、行数

*

* @param  filename  文件名

* @param  totalNum  文件统计数据

*

* @return  成功返回统计数据,否则返回NULL

**/

int *getCharNum(char *filename, int *totalNum){

FILE *fp;  // 指向文件的指针

char buffer[1003];  //缓冲区,存储读取到的每行的内容

int bufferLen;  // 缓冲区中实际存储的内容的长度

int i;  // 当前读到缓冲区的第i个字符

char c;  // 读取到的字符

int isLastBlank = 0;  // 上个字符是否是空格

int charNum = 0;  // 当前行的字符数

int wordNum = 0; // 当前行的单词数

if( (fp=fopen(filename, "rb")) == NULL ){

perror(filename);

return NULL;

}

printf("line   words  chars\n");

// 每次读取一行数据,保存到buffer,每行最多只能有1000个字符

while(fgets(buffer, 1003, fp) != NULL){

bufferLen = strlen(buffer);

// 遍历缓冲区的内容

for(i=0; i<bufferLen; i++){

c = buffer[i];

if( c==' ' || c=='\t'){  // 遇到空格

!isLastBlank && wordNum++;  // 如果上个字符不是空格,那么单词数加1

isLastBlank = 1;

}else if(c!='\n'&&c!='\r'){  // 忽略换行符

charNum++;  // 如果既不是换行符也不是空格,字符数加1

isLastBlank = 0;

}

}

!isLastBlank && wordNum++;  // 如果最后一个字符不是空格,那么单词数加1

isLastBlank = 1;  // 每次换行重置为1

// 一行结束,计算总字符数、总单词数、总行数

totalNum[0]++;  // 总行数

totalNum[1] += charNum;  // 总字符数

totalNum[2] += wordNum;  // 总单词数

printf("%-7d%-7d%d\n", totalNum[0], wordNum, charNum);

// 置零,重新统计下一行

charNum = 0;

wordNum = 0;

}

return totalNum;

}

WC项目的更多相关文章

  1. 软件工程wc项目,基于py

    ###WC项目文件链接:https://github.com/ILTHEW/wc.git 个人项目:WC 实践是理论的基础和验证标准,希望读者贯彻"做中学"的思想,动手实现下面的项 ...

  2. 软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序

    软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序 格式:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数 ...

  3. 作业三:WC项目

    WC一个简单的文件检测系统 用c语言实现 不多说 上代码 #include<stdio.h> #include<stdlib.h> #include <io.h> ...

  4. 软件工程实践-WC项目之C实现

    1.Github项目地址 https://github.com/ShadowEvan/homework 基本功能 -c 统计文件字符数(实现) -w 统计文件词数(实现) -l  统计文件行数(实现) ...

  5. 软件工程:java实现wc项目基本功能

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

  6. java实现WC项目

    个人项目:WC   wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单 ...

  7. C语言实现wc项目

    该World Count项目用的是C语言编写,只实现了-c.-w.-l.三个功能,由于简单全部代码均由小编自己编写,用的是VS2013只支持windows平台cmd运行. 木有图形界面,参考了Linu ...

  8. wc项目记录

    1.Github项目地址:https://github.com/3116004700/ruanjiangongcheng 2.预估时间见PSP表格. 3.解题思路描述: 在看到这个项目的时候我就想到了 ...

  9. wc项目(node.js实现)

    一.github地址:https://github.com/Jasminejiamei/homework-wc 二.PSP PSP Personal Software Process Stages 预 ...

随机推荐

  1. C#利用反射机制创建对象

    "反射"其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用 ...

  2. 在mac电脑上创建java的一些简单操作

    首先你要在电脑上下载一个JDK创造出一个java环境 如下第二个: 然后步奏如下: step1:苹果->系统偏好设置->最下边点MySQL 在弹出页面中 关闭mysql服务(点击stop ...

  3. 移动端接口:java写get方式访问数据(springmvc+spring。。。)

    很多时候,一个问题想明白,找对点了再去问,这样被问的人也知道怎么给你讲,你也听的明白. 就比如做移动端接口,上去就问 怎么弄接口呀,其实是没找到主要的点上,所以不知道怎么弄,那个点就是手机接口是干嘛的 ...

  4. Git使用教程【转】

    Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是 ...

  5. java URL实现调用其他系统发送报文并获取返回数据

    模拟本系统通过Url方式发送报文到目标服务器,并获取返回数据:(实现类) import java.io.BufferedOutputStream; import java.io.BufferedRea ...

  6. 自己动手写Logistic回归算法

    假设一个数据集有n个样本,每个样本有m个特征,样本标签y为{0, 1}. 数据集可表示为: 其中,x(ij)为第i个样本的第j个特征值,y(i)为第i个样本的标签. X矩阵左侧的1相当于回归方程的常数 ...

  7. 话说C++中的左值、纯右值、将亡值

    写在前面 C++中有“左值”.“右值”的概念,C++11以后,又有了“左值”.“纯右值”.“将亡值”的概念.关于这些概念,许多资料上都有介绍,本文在拾人牙慧的基础上又加入了一些自己的一些理解,同时提出 ...

  8. Python之操作Redis、 RabbitMQ、SQLAlchemy、paramiko、mysql

    一.Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.Redis是一个key-value存储系统.和 ...

  9. vmware

    vSphere Client 图形用户界面提供了执行许多配置任务的首选方式.但是,如有必要,可以使用 ESXi Shell 在命令行处配置 ESXi .esxcli network firewall ...

  10. C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。

    作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1)    输入10个无序的整数.(2)    用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3)    要求任意输入一个整数 ...