Online Compiler C

#include <stdio.h> #include <string.h> int main() { char str[1005]; if (fgets(str, sizeof(str), stdin) == NULL) { return 0; } int len = strlen(str); if (len > 0 && str[len - 1] == '\n') { str[len - 1] = '\0'; len--; } if (len == 0) { return 0; } int count = 1; for (int i = 0; i < len; i++) { if (i + 1 < len && str[i] == str[i + 1]) { count++; } else { putchar(str[i]); if (count > 1) { printf("%d", count); } count = 1; } } printf("\n"); return 0; }
这段代码实现了简单的游程编码(Run-Length Encoding),将连续相同的字符压缩为“字符+重复次数”的形式。例如输入 "aaabbbcc" 会输出 "a3b3c2"。

代码逻辑基本正确,但有一个边界情况需要留意。

- 当字符串长度正好等于数组大小时,fgets 可能不会读到换行符,此时 len 的计算和换行符处理需要更谨慎。
- 如果输入包含数字字符,输出结果可能产生歧义,例如 "a1" 会被解码为 "a" 重复1次还是字符 'a' 和数字 '1'?但这不是当前代码的错误,只是游程编码的固有问题。