【C程序设计语言第二版】统计字符数、行数以及单词数

1.统计字符数

我们可以利用getchar函数,来进行字符的读入,并对读入的字符进行判断。
EOF:文件结束符,这个特殊值常量与任何实际字符都不相同。

这里我们用int类型来接收getchar返回的字符的的原因:为了让变量 c c 能存下EOF这个常量值。

各种数据类型能表示的数值范围由编译器决定。char类型在有些编译器中定义的范围为 0 255 0 \sim255 ,另外一些编译器中定义的范围为 128 127 -128 \sim 127 。当编译器中定义的范围为 0 255 0 \sim 255 时,用char接收getchar()返回值时就会出错。数据类型具体的定义范围可在<limits.h>文件中找到。

#include <stdio.h>
int main(void)
{
	int c;
	int cnt = 0;
	while(getchar() != EOF) 
		++cnt;
	printf("%d\n", cnt);
	return 0;
}

2.统计行数

我们可以用\n一行的结束,所以代码如下:

#include <stdio.h>
int main(void)
{
	int c;
	int cnt = 0;
	while(((c = getchar()!= EOF)
		if(c == '\n')
			++cnt;
	printf("%d\n", cnt);
	return 0;
}

3.统计单词数

根据观察普通文本,有以下五种情况我们需要考虑:

注:空白字符包括(空格、换行符(\n)、制表符(\t))

  • 读到了一个非空白字符,且后面仍有非空白字符
  • 读到了一个非空白字符,且后面为空白字符
  • 读到了一个空白字符,后面是一个非空白字符
  • 读到了一个空白字符,后面仍然是空白字符
  • 读到了文件结束符

根据上述情况,我们对统计单词数程序的具体程序如下:

  1. 处理空白字符
  2. 处理连续非空白字符
  3. 处理换行符和文件结束符
#include <stdio.h>
int main(void)
{
#include <stdio.h>
#define IN 1 /* 在单词内 */
#define OUT 0 /* 在单词外 */
int main(void)
{
    int c, nl, nw, nc, state;
    state = OUT;
    nl = nw = nc = 0;
    while((c = getchar()) != EOF) {
        ++nc;
        if(c == '\n') ++nl;
        if(c == ' ' || c == '\n' || c == '\t') state = OUT;
        else if(state == OUT) {  // 从单词外进入单词内就把单词数加一
            state = IN;
            ++nw;
        }
    }
    printf("单词数:%d, 行数:%d, 字符数:%d\n", nw, nl, nc);
    return 0;
}
}
发布了128 篇原创文章 · 获赞 20 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u011544909/article/details/93655872
今日推荐