在线编译器 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] == '.') { break; } if (s[i] == last_c) { count++; } else { printf("%c%d", last_c, count); count = 1; } last_c = s[i]; } } int main() { pack_string("aaabbbbaa."); return 0; }
这段代码试图实现一个字符串压缩功能,将连续重复的字符替换为“字符+重复次数”的形式。例如输入"aaabbbbaa.",期望输出"a3b4a2"。

代码的主要逻辑是遍历字符串直到遇到句点,统计连续相同字符的数量,并在字符变化时打印前一个字符及其计数。但存在几个问题:

- 循环结束后,最后一个字符组没有被打印出来。因为打印操作只在字符变化时触发,而字符串结束时没有触发打印。
- 初始计数逻辑有误。当遇到新字符时,应该先输出前一个字符及其计数,然后重置计数为1(因为当前字符已经出现一次),但代码中`count = 1`的位置正确,不过需要确保循环结束后处理最后一组。
- 变量`last_c`的更新位置需要调整。当前在每次循环末尾更新,但应该在判断字符变化之后、处理新字符之前更新,否则会影响计数逻辑。

- 检查循环结束后是否遗漏了最后一组字符的打印。
- 思考变量`last_c`应该在何时更新,才能正确记录当前正在统计的字符。