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

#include <stdio.h> int counter(char s[]) { int counter = 0; int start = 0, end = 0; int i = 0; int digit; while (s[i] != '\0') { digit = s[start]- s[end]; if (digit==0||digit=='A'-'a'||digit=='a'-'A' ) { counter++; } start = i; while (s[i] != ' ' && s[i] != '\0') { end = i; i++; } i++; } return counter; } int main() { char a[1001]; scanf("%[^\n]", a); printf("%d", counter(a)); return 0; }
这段代码试图统计字符串中某些“对称”或“相等”的单词对,但逻辑存在明显问题。代码中 `digit` 的计算方式 `s[start] - s[end]` 在循环中始终为0(因为 `start` 和 `end` 初始相同),且后续条件判断的写法有误。

- 你的 `digit` 计算在循环开始时 `start` 和 `end` 都等于0,所以 `s[start] - s[end]` 总是0。你需要重新思考如何比较单词的首尾字符,而不是用同一个字符减自己。
- 条件 `digit=='A'-'a'` 这种写法意图是判断大小写差值,但 `'A'-'a'` 是一个固定数值(-32),而 `digit` 是字符差,逻辑不匹配。你应该直接比较字符本身,比如 `s[start] == s[end]` 或考虑大小写转换。