需求分析:

1.写出一个程序,模仿wc.exe,通过输入文件名,实现文件内容读取;

2.统计出文件内容的总字符数、总单词数、行数、每行字符数、每行单词数。

代码分析:

一.打开文件。

    FILE *fp;
char filename[], con[];
gets(filename);//读取文件名
if ((fp = fopen(filename, "r")) == NULL)
{
printf("无法打开该文件!");
return;//用exit(0)报错,后修正为return
}

二.读取文件。

fgets(con, , fp);//将文件中的内容读取到con中,遇到'\n'或者读取500个字符结束

三.统计每行字符个数。

int charcounter(char* con)//统计每行字符个数
{
int num = ,i=;
for (i = ; i < strlen(con); i++)
{
if (con[i] != '\n'&&con[i] != ' '&&con[i] != '\t')
{
num++;
}
}
return num;
}

四.统计每行是否为空行,利用返回值是否为真,计算有效行数。

bool linenum(char* con)//判断每行是否为空行
{
if (charcounter(con) != )
return true;
return false;
}

五.计算每行的单词个数。

int wordnum(char* con)//计算单词数
{
int n = , i;
for (i = ; i < strlen(con); i++)
{
if ((con[i]>'a'&&con[i]<'z')||(con[i]>'A'&&con[i]<'Z'))//单词的第一个字符为字母
{
while (i<strlen(con))
{
if (!((con[i] >= 'a'&&con[i] <= 'z') || (con[i] >= 'A'&&con[i] <= 'Z') || con[i] == '.'|| con[i] == '_' || (con[i] >= '' &&con[i] <= '')))//首字母后的字符不为字母、数字、下划线、小数点时
{
n++;
break;
}
i++;
}
}
}
return n;
}

六.计算总字符数,调用子函数charcounter(con)。

connum = connum + charcounter(con);

七.计算总单词数,调用子函数wordnum(con)。

wordn = wordn + wordnum(con);

源程序运行效果图如下:

源码已上传coding。如下:

 #include<stdio.h>
#include<string.h>
int charcounter(char* con)//统计每行字符个数
{
int num = ,i=;
for (i = ; i < strlen(con); i++)
{
if (con[i] != '\n'&&con[i] != ' '&&con[i] != '\t')
{
num++;
}
}
return num;
}
bool linenum(char* con)//判断每行是否为空行
{
if (charcounter(con) != )
return true;
return false;
} int wordnum(char* con)//计算单词数
{
int n = , i;
for (i = ; i < strlen(con); i++)
{
if ((con[i]>'a'&&con[i]<'z')||(con[i]>'A'&&con[i]<'Z'))//单词的第一个字符为字母
{
while (i<strlen(con))
{
if (!((con[i] >= 'a'&&con[i] <= 'z') || (con[i] >= 'A'&&con[i] <= 'Z') || con[i] == '.'|| con[i] == '_' || (con[i] >= '' &&con[i] <= '')))//首字母后的字符不为字母、数字、下划线、小数点时
{
n++;
break;
}
i++;
}
}
}
return n;
}
void main()
{
FILE *fp;
int connum=,m=,wordn=;
char filename[], con[];
printf("请输入文件名\n");
gets(filename);//读取文件名
if ((fp = fopen(filename, "r")) == NULL)
{
printf("无法打开该文件!");
return;//用exit(0)报错,后修正为return
}
int i = ;
while (!feof(fp))
{
printf("第%d行 ", i);
i++;
fgets(con, , fp);//将文件中的内容读取到con中,遇到'\n'或者读取500个字符结束
printf("%d个字符", charcounter(con));
printf("%d个单词", wordnum(con));
puts(con);
connum = connum + charcounter(con);
wordn = wordn + wordnum(con);
if (linenum(con))
m++;
}
printf("---以上共有%d行(除空行外),共有%d个字符.", m, connum);
printf("共有%d个单词", wordn);
gets(con);
fclose(fp);
}

第三周作业--Word Counter的更多相关文章

  1. 第三周作业————————word count

    #include <stdio.h> void main() { FILE *fp; , str, word, pu, ch; int g; str = ; word = ; pu = ; ...

  2. JAVA第三周作业(从键盘输入若干数求和)

    JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...

  3. 第三周作业、实时操作系统µC/OS介绍及其它内容

    作业要求 见<实时控制软件设计>第三周作业 1 阅读笔记--µC/OS 1.1 基本介绍 µC/OS是由Micrium公司研发的实时操作系统,以µC/OS-II或µC/OS-III为内核, ...

  4. 2018-2019-1 20189221《Linux内核原理与分析》第三周作业

    2018-2019-1 20189221<Linux内核原理与分析>第三周作业 实验二 完成一个简单的时间片轮转多道程序内核代码 实验过程 在实验楼中编译内核 编写mymain.c函数和m ...

  5. 2017-2018-2 1723《程序设计与数据结构》第三周作业 & 实验一 总结

    作业地址 第三周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1667 提交情况如图: 实验一:https://edu.c ...

  6. 第三周作业(一)VS安装及单元测试练习

    第三周作业(一) 需求:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂,没 ...

  7. 2017-2018-1 JaWorld 第三周作业

    2017-2018-1 JaWorld 第三周作业 团队展示 队员学号 队名 团队项目描述 队员风采 团队的特色 团队合照 团队初步合作 前两周的反思与总结 需要改进的地方 团队选题 *采访老师或有开 ...

  8. 2017-2018-1 JAVA实验站 第三周作业

    2017-2018-1 JAVA实验站 第三周作业 团队展示 队名 JAVA实验站 拟作的团队项目描述 (2048)增加其他模式,使得2048更加丰富多彩 团队的首次合照 团队的特色描述 团队内部很团 ...

  9. 2017-2018-1 20179205《Linux内核原理与设计》第三周作业

    <Linux内核原理与分析>第三周作业 教材学习总结 第三章 进程管理 进程是Unix操作系统抽象概念中最基本的一种,是正在执行的程序代码的实时结果:线程,是在进程中活动的对象.而Linu ...

随机推荐

  1. Linux的nm查看动态和静态库中的符号

    功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...

  2. Linux的一些常用快捷键和基本命令

    *******1.在Linux中,只有/能够当盘符,/首先要分配给系统盘所在分区*******2.swap交换分区,相当于Windows下的虚拟内存,用来模拟内存,当内存不够用时,就会使用交换分区.其 ...

  3. MYSQL 内存报错 Use 'mysqld --thread_stack=#' to specify a bigger stack.

    今天在使用mysql的过程中,连接数据库始终无法成功 最后发现是数据库无法执行增加修改的操作 :错误代码 Thread stack overrun:  11552 bytes used of a 13 ...

  4. java安全沙箱(三)之内置于Java虚拟机(及语言)的安全特性

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

  5. Linux 如何解决 xhost: unable to open display ""

    [root@host02 ~]# vncservice You will require a password to access your desktops. Password: Verify: x ...

  6. vs 配置宏

    Win_$(PROCESSOR_ARCHITECTURE)_$(PlatformArchitecture) <==> Win_x86_64 OR Win_x86_32$(Configura ...

  7. Android性能优化典范

    来源:http://hukai.me/android-performance-patterns/#jtss-tsina 0)Render Performance 大多数用户感知到的卡顿等性能问题的最主 ...

  8. CM添加kafka服务

    下载所需的包: 在http://archive.cloudera.com/kafka/parcels/latest/ 选择合适parcel下载: ubuntu14.04的cdh5.5.1对应包 htt ...

  9. Ionic发布成android

    目前环境 1.ant的版本是1.9.4 2.jdk的版本是1.7 3.ionic安装版本是1.5.5 4.cordova版本是5.1.1 经测试,虽然ionic上面写的支持的最低版本是android- ...

  10. 向架构师进军--->如何编写软件架构文档

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 问:为什么要编写软件架构文档,它的好处是什么? 答: 有文档的架构有助于不同利益相关 ...