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

#include <stdio.h> void pack_string(char s[]) { char last_c = s[0]; int count = 0; for (int i = 0; s[i] != '\0'; i++) { if (s[i] == last_c) { count++; } else { printf("%d%d", last_c, count); count = 1; } last_c = s[i]; } } int main() { pack_string("aaaaabbbc."); return 0; }
这段代码试图实现一个字符串压缩功能:将连续相同的字符替换为该字符和出现次数。但代码中存在逻辑错误。

- 在循环中,`last_c` 被更新为当前字符 `s[i]`,但判断条件使用的是更新前的 `last_c`,这导致逻辑混乱。例如,当遇到不同字符时,`last_c` 已经被更新为新的字符,但打印的却是旧字符。
- 循环结束后没有打印最后一组字符的统计结果,导致末尾的字符和计数丢失。
- 打印格式使用了 `%d%d`,但 `last_c` 是字符类型,应该用 `%c` 打印字符,否则会输出 ASCII 码值。

提示:
- 思考 `last_c` 应该在什么时候更新。是每次循环都更新,还是只在遇到不同字符时更新?
- 循环结束后,还需要处理最后一组连续字符的统计结果。