题目
读文本文件,统计单词数(以空白分隔)
思路
本题统计文本文件中的单词数(空白分隔)。
维护状态 inWord:从「不在单词内」进入非空白字符时 words++ 并置在单词内;遇到空白则置不在单词内;文件结束前别漏掉最后一个词。
解题分析
fscanf 读 %s 会以空白分隔单词,连续空白算一次分隔。标点粘在单词上算同一 token,若要严格标点切分需自行 parse。
函数简要说明
在已打开的文本文件上按空白分隔读单词时,常见两种写法:
fscanf(fp, "%s", word):跳过前导空白,读入一个不含空白的 token;重复调用直到返回非 1,统计次数即为单词数。标点会粘在单词上,与 C100 题意一致。fgets读整行再用循环/字符串函数切分也可以,本题fscanf更短。fopen/fclose:同第 91 题,打开失败要单独处理。
完整程序
#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;
while (fscanf(fp, "%255s", word) == 1) {
cnt++;
}
fclose(fp);
printf("%d\n", cnt);
return 0;
}