在线编译器 C

#include <stdio.h> int main() { char s[1001] = {0}; fgets(s, sizeof(s), stdin); char n = s[0] + 32; int count = 0, i; for (i = 0; s[i] != '\0'; i++) { if (s[i] == ' ') { if (s[i - 1] == n) { count++; n = s[i + 1]; } } } if (s[i] == '\0') { if (s[i - 1] == n) count++; } printf("%d", count); return 0; }
这段代码试图统计一段文本中,每个单词的首字母与前一个单词的首字母(转换为小写后)相同的次数。但代码中存在逻辑错误。

- 代码将第一个字符 `s[0]` 加上32(即转换为小写)作为初始的 `n`,然后遍历字符串,遇到空格时检查空格前的字符是否等于 `n`,如果是则计数并更新 `n` 为空格后的字符。但这里忽略了单词首字母的大小写转换,且 `n` 的更新逻辑有误。
- 循环结束后,又单独检查了最后一个单词的首字母,但同样没有考虑大小写转换。

提示:
- 注意每个单词的首字母可能是大写或小写,比较前需要统一转换为同一种大小写。当前代码只对第一个字符做了转换,后续的 `n` 更新时没有做转换。
- 当遇到空格时,空格前的字符是前一个单词的最后一个字母,而不是首字母。你需要找到前一个单词的首字母和下一个单词的首字母进行比较。