Онлайн компилятор 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=s[i]; i++; } } return counter; } int main() { char a[1001]; scanf("%[^\n]", a); printf("%d", counter(a)); return 0; }
这段代码试图统计字符串中某种模式的数量,但逻辑存在明显问题。代码中变量 `start` 和 `end` 的使用方式不正确,且循环结构混乱,导致无法正确遍历字符串。

- 变量 `start` 和 `end` 被初始化为0,但之后从未更新 `start` 的值,而 `end` 被错误地赋值为字符(`end=s[i]`),这会导致类型不匹配(`end` 是整数索引,却存储了字符的ASCII值)。
- 内部 `while(s[i]!=' '` 循环会跳过空格,但缺少对字符串结尾的判断,可能导致越界访问。
- 外层 `while` 循环中,`if(i!=0)` 条件导致 `i` 在非零时额外增加一次,这会使索引跳跃,无法正确遍历每个字符。

建议重新思考算法逻辑:先明确要统计什么模式(例如相邻相同字符、回文等),然后设计清晰的遍历方式,使用两个索引分别指向需要比较的位置,并确保索引在字符串范围内移动。