题目

编写程序读取一段英文文本,统计并输出其中包含的总单词数(以连续的一个或多个空格、制表符、换行符等空白字符作为单词分隔界限)。

输入格式:输入一段英文字符串文本(可多行,以文件结束符 EOF 或特定标记结束)。

输出格式:输出一个整数表示文本中包含的单词总数。

数据范围与约定:文本总字符数不超过 10000。

思路与算法

1. 状态机思想
维护布尔标记 in_word = 0 表示当前是否正处于单词内部。

2. 状态切换与单词计数
逐字符扫描:遇到非空白字符且 !in_word 时,说明进入了一个新单词的起始位置,words++; in_word = 1;;遇到空白字符(isspace(c))时,状态重置为 in_word = 0;。

完整程序

#include <stdio.h>

int main(void)
{
    FILE *fp = fopen("input.txt", "r");
    if (!fp) {
        printf("open failed\n");
        return 1;
    }

    char word[256];
    int cnt = 0;
    // fscanf 以空白符(空格、换行、制表符)为边界读入单词,读入成功时返回值等于匹配参数个数 1
    while (fscanf(fp, "%255s", word) == 1) {
        cnt++;
    }

    fclose(fp);
    printf("%d\n", cnt);
    return 0;
}