Online Compiler C

#include <stdio.h> int main() { char s[1001] = {0}; fgets(s, sizeof(s), stdin); int count = 0; for (int i = 0; s[i] != '\0'; i++) { char first = s[i], last = first; if (i == 0 || s[i - 1] == ' ') { first = s[i]; for (int j = i; s[j] != ' ' || s[j] != '\0'; j++) { last = s[j]; } } if (first == last) count++; } printf("%d", count); return 0; }
这段代码试图统计字符串中首尾字母相同的单词个数,但存在逻辑错误。

- 内层循环的条件 `s[j] != ' ' || s[j] != '\0'` 永远为真,因为任何字符都不可能同时等于空格和空字符,所以循环会一直运行到字符串末尾,导致 `last` 被赋值为字符串的最后一个字符,而不是当前单词的最后一个字符。
- 另外,`first` 的赋值可以简化,因为已经在循环开始时从 `s[i]` 获取了。

- 检查内层循环的终止条件,思考如何正确找到当前单词的结尾(即遇到空格或字符串结束符时停止)。
- 注意外层循环中 `i` 的递增方式,当找到一个单词后,需要跳过整个单词,否则会重复统计单词内部的字符。