在线编译器 C

#include <stdio.h> int main() { char s[1001] = {0}; scanf("%s", s); for (int i = 0; s[i] != '\0'; i++) { if (!(s[i] >= '0' && s[i] <= '9')) { if (s[i + 1] >= '0' && s[i + 1] <= '9') { int count = 0; for (int j = i + 1; s[j] >= '0' && s[j] <= '9'; j++) { count = count * 10 + (s[j] - '0'); } for (int j = count; j > 0; j--) { printf("%c", s[i]); } } else printf("%c", s[i]); } } return 0; }
这段代码尝试实现一个简单的字符串解压缩功能:将类似 "a3b2c" 的输入展开为 "aaabbc"。它的思路是遍历字符串,遇到非数字字符时,检查后面是否有数字,如果有则按数字次数重复输出该字符。

代码中存在一个关键错误:当处理完数字部分后,循环变量 `i` 没有跳过已处理的数字字符,导致后续循环会再次读取这些数字字符,可能产生错误输出或无限循环。

- 在内部循环处理完数字后,需要将外层循环的索引 `i` 移动到数字序列的末尾,否则 `i++` 会让程序重新进入数字区域。
- 注意数字可能有多位,当前代码虽然正确计算了 `count`,但没有更新 `i` 的位置,导致后续逻辑混乱。