题目
编写程序读取一段英文文本,统计并输出其中包含的总单词数(以连续的一个或多个空格、制表符、换行符等空白字符作为单词分隔界限)。
输入格式:输入一段英文字符串文本(可多行,以文件结束符 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;
}