Online Compiler C

#include <stdio.h> void pack_string(char s[]) { int i = 0; char answer[100]; while (s[i] != '.') { int count = 0; char n = s[i]; while (s[i] != '.' && s[i] == n) { count++; i++; } sprintf(answer, "%c%d", n, count); } int len=0; for(int i=0;answer[i]!='.';i++){ s[i]=answer[i]; len++; } s[len]='\0'; } int main() { char s[] = "aaaaabbbc."; pack_string(s); printf("%s",s); return 0; }
这段代码试图实现一个字符串压缩功能:将连续重复的字符替换为"字符+重复次数"的形式。例如 "aaaaabbbc." 应该变成 "a5b3c1."。

代码的主要问题在于压缩结果的拼接方式。每次找到一组重复字符时,`sprintf` 会覆盖 `answer` 之前的内容,导致最终只有最后一组压缩结果被保留。同时,循环结束后将 `answer` 复制回原字符串时,`answer` 中只包含了最后一组数据。

- 检查 `sprintf` 的使用:每次调用都会从 `answer` 的开头写入,而不是追加到末尾。你需要考虑如何将每次的压缩结果依次添加到 `answer` 中。
- 注意原字符串末尾的 `'.'` 是终止标记,但压缩后的结果中不应该包含这个点。思考循环条件和复制逻辑是否匹配。