统计一行文本的单词个数

一、题目到底在考什么
给定一行字符,要求:
单词 = 连续不含空格的字符串
单词之间可以有多个空格
行首、行尾也可能有空格
输出:单词总个数
关键点:
不能简单看到空格就 + 1,因为连续多个空格只算分隔一次。

二、核心解题思路(万能模板)

  1. 用一个 “状态标记”
    定义一个变量,比如:
    c

int in_word = 0;

in_word = 0:当前在空格里
in_word = 1:当前在单词里

  1. 遍历每个字符
    逐个读字符,直到读到换行 \n 为止(代表一行结束)。

  2. 只有一种情况要 +1
    从 “空格” → 第一次进入 “单词” 时,单词数 +1
    也就是:
    c

if (当前字符不是空格 && in_word == 0) {
count++;
in_word = 1;
}

遇到空格时:
c

if (当前字符是空格) {
in_word = 0;
}

三、为什么这么写
这样能自动处理所有情况:
行首多个空格
中间多个空格
行尾空格
空行
只有一个单词

四、标准完整代码(背下来)
c

include <stdio.h>

int main() {
char c;
int count = 0; // 单词数
int in_word = 0;

// 读取一行所有字符,直到换行
while ((c = getchar()) != '\n') {
if (c != ' ') {
// 从空格进入单词 → 新单词
if (in_word == 0) {
count++;
in_word = 1;
}
} else {
// 进入空格区
in_word = 0;
}
}

printf("%d\n", count);
return 0;
}

五、这类题最容易犯的错
1.用 scanf ("% s") 读一行
%s 遇到空格就停,读不完一整行。
→ 必须用 getchar() 或 gets/fgets。
2. 看到空格就 count++
连续空格会导致 count 暴增,结果错误。
3. 忘记处理行首空格
行首空格不能算单词开始。
4.字符比较写成 " "
字符必须用单引号 ' ',双引号是字符串。

六、同类题通用解法
只要是统计单词、统计句子、统计字母段,都用这个思路:
状态标记法
记录当前在 “里面” 还是 “外面”
只有从外进入内时才计数

posted on 2026-04-21 20:59  谢天佑  阅读(18)  评论(0)    收藏  举报