Онлайн компилятор C

#include <stdio.h> int main() { char s[1001] = {0}; fgets(s, sizeof(s), stdin); char n = s[1] + 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[1])并加上32,这可能是想将大写字母转为小写。接着遍历字符串,遇到空格时检查前一个字符是否等于这个字母,如果相等就计数并更新目标字母为空格后的第一个字符。最后在字符串结尾处也做了类似检查。

- 代码假设输入的第一个单词的第二个字符就是目标字母,这很可能不是题目的本意。你需要重新思考如何确定要统计的是哪个字母开头的单词。
- 当遇到空格时,代码检查的是空格前的字符(即前一个单词的最后一个字符),而不是空格后的字符(即下一个单词的第一个字符)。你需要检查的是下一个单词的首字母。