Online Compiler C

#include <stdio.h> int main() { char s[1001] = {0}; fgets(s, sizeof(s), stdin); char n = s[0]; int count = 0, i; for (i = 0; s[i] != '\0'; i++) { if (s[i + 1] == ' ' || s[i + 1] == '\0') { if (s[i] == n + 32 || s[i] == n - 32) { count++; } else if (s[i] == ' ') n = s[i + 1]; } } printf("%d", count); return 0; }
这段代码试图统计输入字符串中,以某个特定字母开头(不区分大小写)的单词数量。但逻辑上有一些混乱的地方。

- 代码用 `n` 记录当前要匹配的首字母,初始为第一个字符 `s[0]`。
- 循环中,当遇到空格或字符串结尾时,检查当前单词的最后一个字符是否与 `n` 的大小写变体匹配,这不符合“单词首字母”的意图。
- 当遇到空格时,又把 `n` 更新为空格后的下一个字符,这会导致匹配规则不断变化。

主要问题在于:
- 你检查的是单词的最后一个字符,而不是第一个字符。
- 更新 `n` 的时机和方式不正确,导致匹配目标在循环中不断改变。

提示:
- 思考如何识别一个单词的开始位置,而不是结束位置。通常可以在遇到空格后,下一个非空格字符就是新单词的首字母。
- 变量 `n` 应该只设置一次(比如输入的第一个字母),而不是在循环中反复更新。