Online Compiler C

#include <stdio.h> #include <string.h> int is_number(char a) { int number = 0; if (a >= '2' && a <= '9') { number = 1; } return number; } void result(char s[]) { int i = 0; while (s[i] != '\0') { int number = is_number(s[i]); if (number) { int digit = s[i] - '0'; while (digit > 0) { printf("%c", s[i - 1]); digit--; } i++; } else if (!number) { i++; if (s[i] == '\0') { printf("%c", s[i - 1]); } else { int number_after = is_number(s[i]); if (!number_after) { printf("%c", s[i - 1]); i++; } else { i++; } } } } } int main() { char a[1001]; scanf("%[^\n]", a); result(a); return 0; }
这段代码试图实现一个字符串展开功能:当遇到数字时,将前面的字符重复该数字次数。但代码逻辑存在一些问题。

- 代码中 `is_number` 函数只判断了 '2' 到 '9',忽略了 '0' 和 '1',这会导致数字 0 和 1 不被正确处理。
- 在 `result` 函数中,处理非数字字符的逻辑过于复杂,并且当连续出现非数字字符时,可能会漏掉输出或重复输出。
- 循环中 `i` 的递增方式不统一,有时在内部递增,有时在外部递增,容易导致索引越界或跳过字符。

- 建议重新梳理处理逻辑:遍历字符串时,遇到非数字字符先暂存,遇到数字时根据数字重复输出之前暂存的字符。注意处理数字为 0 或 1 的情况。
- 注意边界情况,比如字符串开头就是数字,或者连续多个数字的情况。