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

#include <stdio.h> int main() { char s[1001] = {0}; fgets(s, sizeof(s), stdin); int count = 0, i, j; for (i = 0; s[i] != '\0'; i++) { char first; if (s[i] != ' ') { if (i == 0 || s[i - 1] == ' ') { if (s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i] + 32; first = s[i]; for (j = i; s[j] != ' '; j++) { if (s[j] == '\0') break; } if (first == s[j - 1]) count++; } } } printf("%d", count); return 0; }
这段代码的功能是:从标准输入读取一行字符串,统计其中有多少个单词的首字母和尾字母相同(不区分大小写)。代码遍历每个字符,当遇到单词开头时,记录首字母并转为小写,然后找到单词末尾,比较首尾字母是否相等。

- 代码中 `if (s[j] == '\0') break;` 的位置可能导致循环提前退出,从而无法正确获取单词的最后一个字符。考虑一下当单词正好在字符串末尾时,循环条件 `s[j] != ' '` 和这个 break 语句的执行顺序。
- 在比较首尾字母时,尾字母 `s[j-1]` 可能仍是大写,而首字母已经转为小写,这会导致大小写不匹配。需要确保比较时两者都是小写。