Online Compiler C

#include <stdio.h> int counter(char s[]){ int counter = 0; int start = 0, end = 0; int i=0; while(s[i]!='\0'){ if(i!=0){ i++; } if(s[start]==s[end] && start!=end){ counter++; } while(s[i]!=' '){ end=i; i++; } } return counter; } int main() { char a[1001]; scanf("%[^\n]", a); printf("%d", counter(a)); return 0; }
这段代码试图统计字符串中相邻相同字符对的数量,但逻辑存在明显问题。

- 你的外层 while 循环条件 `s[i]!='\0'` 是正确的,但循环内部对 `i` 的递增方式混乱,导致 `i` 可能不会正常遍历整个字符串。特别是 `if(i!=0){ i++; }` 这个判断会让 `i` 在第一次循环时不递增,之后每次循环额外多增一次,破坏了遍历顺序。
- 内层 `while(s[i]!=' '){ end=i; i++; }` 会跳过空格,但 `end` 被不断更新为当前字符位置,而 `start` 从未改变,导致 `s[start]==s[end]` 的比较始终是第一个字符与当前字符的比较,而不是相邻字符的比较。同时,如果字符串中没有空格,这个内层循环会一直走到字符串末尾,然后外层循环条件失效。

- 你的思路可能是想比较相邻字符,但 `start` 和 `end` 的更新逻辑没有正确实现“相邻”的概念。你需要重新设计如何让 `start` 和 `end` 分别指向当前字符和下一个字符,并在每次比较后同步移动它们。