写英语作文的时候,常常要求满足一定的字数,在以往,要么,我们一个一个地数,要么,我们估算一行的单词数,然后用行数进行估算。第一种方法太费时,如果要是写个长篇大论,那几乎是mission imposible,而第二种方法有不太准确。这就给我们留下了一个问题:如何又快又准确地统计一篇英文文章中的单词数?
程序,就是用来帮助人们完成这些看起来枯燥繁琐但是带有一定规律性的事情的。
要解决这个问题,最自然的想法是,读取文章的所有内容(用fopen()和fgets()),然后一个单词一个单词地统计,然而,我们在这里遇到了一个难题:程序看不懂英文,他如何知道什么是一个单词,什么不是一个单词呢?我们似乎在这里遇到了障碍,可是,如果我们换个角度思考问题,也许会柳暗花明又一村:我们注意到,文章中的单词都是用空格间隔开的,那么换句话说,也就是
单词数=空格数+1
程序不认识单词,但是程序认识空格啊。这样,整个问题实际上转换为了统计文章中的空格数。
有了这样的问题转换,整个问题就简单多了。你可以先按照这个思路自己实现,先来看看这个小例子代码实现:
/* * wordcounts1.c * * Created on: 2013年10月31日17:15:00 * Author: Bruce */ #include <stdio.h> #include <string.h> int main() { //假设需要统计的字符串都保存在str字符数组中 char str[128] = "This is a C program!"; //用于保存空格字符数的变量 int numWhiteSpace = 0; //循环遍历整个字符数组,统计空格字符数 int i = 0; while('\0' != str[i]) { //判断当前字符是否是空格 if(' ' == str[i]){ ++numWhiteSpace; //空格数加1 } ++i; //检查下一个字符 } //输出字符串中的单词数,也就是空格数加1. printf("There are %d words in \"%s\"",numWhiteSpace+1,str); return 0; }
简单的29行代码,就可以帮我们数出一个字符串中的单词数, 学了C语言,解决问题就是这么简单啦。 这里,我们只是简单地统计了一个简单字符串中的单词数,那么,如何对一篇英文文章中的单词数进行统计呢? 如何对这个程序进一步优化使其更加合理呢?欲知后事如何,且看下面。 学了C语言,如何写一个程序统计一篇英文文章中的单词数?(续)
要在原程序的基础上进行扩展,实现对文章中单词数的统计,我们有两个工作要做:
- 将原来全部放在main()函数中进行的单词统计功能抽取出来,单独成一个独立的函数countword(),它可以接受一个char*类型的参数,返回的是这个指针所指向的字符串中的单词数。这里需要注意的是,因为在文章中,