Online Compiler C

#include <stdio.h> void pack_string(char s[]){ int sum=1,i=1; char num=s[0]; while(s[i]!='\0'){ if(s[i]==num){ sum++; num=s[i]; }else { printf("%c%d",num,sum); sum=1; num=s[i]; }i++; } } int main() { char a[]="aaaaabbbcc"; pack_string(a); return 0; }
这段代码试图实现一个字符串压缩功能:将连续相同的字符压缩成“字符+出现次数”的形式。例如 "aaaaabbbcc" 应该输出 "a5b3c2"。

代码中有一个关键问题:循环结束后,最后一组连续字符没有被打印出来。因为只有当遇到不同字符时才会打印,而字符串末尾没有新字符来触发最后一次打印。

- 在 while 循环结束后,需要额外处理最后一组字符的打印。当前代码在循环结束后直接返回,没有输出最后一组统计结果。
- 变量 `num` 的命名容易混淆,它实际上存储的是当前正在统计的字符,而不是数字。建议使用更清晰的变量名。