Онлайн компилятор 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') { for (int j = s[i + 1] - '0'; j > 0; j--) { printf("%c", s[i]); } } else { printf("%c", s[i]); } } } return 0; }
这段代码尝试实现一个简单的“字符重复”功能:对于每个非数字字符,如果它后面紧跟着一个数字,就重复输出该字符若干次(次数由数字决定);否则只输出一次。但代码存在逻辑问题。

- 代码没有处理连续数字的情况,比如输入 "a12" 时,数字 '1' 和 '2' 会被分别处理,导致重复次数错误。
- 当数字字符本身被当作“非数字”条件跳过时,如果数字后面还有字符,可能会被错误地忽略或重复。

提示:
- 思考一下,当遇到数字字符时,应该如何处理?数字字符本身不应该被输出,而是用来控制前一个非数字字符的重复次数。
- 考虑用一个变量来记录当前正在处理的非数字字符,以及一个标志来表示是否正在等待数字来决定重复次数。这样能更清晰地处理连续数字的情况。