在线编译器 C

#include <stdio.h> int main() { char s[1001] = {0}; scanf("%s", s); char c = s[0]; int count = 0; for (int i = 0; s[i] != '\0'; i++) { if (s[i] == c) count++; else if (s[i] != c) { if (count > 1) printf("%c%d", c, count); else printf("%c", c); count = 1; } if (s[i + 1] == '\0') { if (count > 1) printf("%c%d", c, count); else printf("%c", c); } c = s[i]; } return 0; }
这段代码试图实现字符串的游程编码(Run-Length Encoding),将连续重复的字符压缩成“字符+重复次数”的形式。例如输入"aaabbbcc"应输出"a3b3c2"。

代码中存在逻辑错误,导致输出结果不正确。

- 变量c的更新时机有问题。你在循环末尾将c更新为s[i],但此时已经用c判断了当前字符,导致下一次循环时c变成了当前字符,而实际应该比较的是下一个字符与当前字符是否相同。这会造成计数混乱。

- 循环内部处理结尾字符的逻辑可以简化。你已经在循环末尾处理了结尾,但结合c的更新问题,会导致重复输出或漏掉最后一个字符组。