Online Compiler C

#include <stdio.h> int main() { char n[100]; scanf("%s", n); int i = 0; int record = 0; while (n[i] != '\0') { int max = n[i]; record = i; for (int j = i; n[j] != '\0'; j++) { if (n[j] >= max) { max = n[j]; record = j; } } if (max > n[i]) { break; } else { i++; } } if (found) { int temp = n[i]; n[i] = n[record]; n[record] = temp; } printf("%s", n); return 0; }
这段代码试图在字符串中找到第一个位置,使得该位置之后的某个字符比它大,然后交换这两个字符。但代码中存在逻辑错误和未定义的变量。

- 变量 `found` 没有被声明或赋值,导致编译错误。你需要先定义这个变量,并在适当的时候设置它的值。
- 内层循环寻找从位置 `i` 开始的最大字符,但条件 `if (n[j] >= max)` 使用了 `>=`,这会导致如果后面有相同字符,`record` 会更新到更靠后的位置。考虑一下你真正想要的是“第一个比当前字符大的字符”还是“最大的字符”,以及交换后是否仍保持字典序最小。