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

本文介绍了一种使用C语言统计文本文件中字符数、行数及单词数的方法,详细解析了如何利用getchar函数读取文件,并通过状态机思想统计单词数量,适用于初学者理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.统计字符数

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

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

各种数据类型能表示的数值范围由编译器决定。char类型在有些编译器中定义的范围为0∼2550 \sim2550255,另外一些编译器中定义的范围为−128∼127-128 \sim 127128127。当编译器中定义的范围为0∼2550 \sim 2550255时,用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>
#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;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值