在线编译器 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[]="aaaaabbbc"; pack_string(a); return 0; }
这段代码试图实现一个字符串压缩功能,将连续重复的字符替换为“字符+重复次数”的形式。例如 "aaaaabbbc" 应该输出 "a5b3c1"。

代码中存在一个逻辑问题:当循环结束时,最后一组连续字符没有被打印出来。因为只有在遇到不同字符时才会输出当前统计结果,而字符串末尾没有新字符触发输出。

- 在 while 循环结束后,需要额外处理最后一组字符的统计结果,因为循环结束时不会自动输出它。
- 变量 `num` 的更新逻辑可以简化:当字符相同时,不需要重新赋值 `num`,因为它已经是当前字符。