Онлайн компилятор C

#include <stdio.h> #include <string.h> int is_mynumber(char a) { int is_number = 0; if (a >= '2' && a <= '9') { is_number = 1; } return is_number; } void result(char a[]) { int i = 0; while (a[i] != '\0') { if (a[i + 1] != '\0') { i++; int is_number = is_mynumber(a[i]); if (is_number) { int times = a[i] - '0'; while (times > 0) { printf("%c", a[i - 1]); times--; } } if (!is_number) { printf("%c", a[i - 1]); } i++; } else if (a[i + 1] == '\0') { printf("%c", a[i]); return; } } } int main() { char a[1001]; scanf("%[^\n]", a); result(a); return 0; }
这段代码试图实现一个字符串解压功能:当字符后面跟着数字时,将该字符重复数字指定的次数输出。例如输入 "a2b3" 应输出 "aabbb"。

代码逻辑存在几个问题:

- 循环中 `i` 的递增方式可能导致跳过字符或重复处理。当前代码在每次循环中手动递增 `i` 两次,但循环本身也会让 `i` 递增,这会导致索引跳跃。

- 当遇到数字时,代码只处理了数字前的字符,但没有处理数字本身。实际上数字不应该被输出,而应该被解释为重复次数。

- 边界情况处理不完整,例如字符串末尾是数字时,或者连续多个数字时,当前逻辑可能出错。

- 检查 `a[i+1] != '\0'` 的方式不够准确,因为数字可能出现在字符串末尾,此时应该如何处理?