在线编译器 C

#include <stdio.h> #include <string.h> int main() { char str[100]; // 声明一个字符数组来存储数字字符串 // 1. 读取输入的数字字符串 if (scanf("%s", str) != 1) { return 0; } int len = strlen(str); // 2. 对字符数组进行降序排序(从大到小,这里使用冒泡排序) for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - i - 1; j++) { if (str[j] < str[j + 1]) { // 如果前面的字符小于后面的字符,则交换位置 char temp = str[j]; str[j] = str[j + 1]; str[j + 1] = temp; } } } // 3. 输出重新排列后的最大数字并换行 printf("%s\n", str); return 0; }
这段代码的功能是:读取一个由数字字符组成的字符串,然后通过冒泡排序将字符按降序排列,最后输出重新排列后的最大数字。

代码整体思路正确,但有一个潜在问题需要注意:

- 输入时使用 `scanf("%s", str)` 只能读取连续的非空白字符,如果输入的数字字符串中包含空格或换行符,会被截断。不过对于纯数字字符串来说,这个用法是可行的。

- 排序逻辑本身没有问题,但冒泡排序的效率较低,对于长度较长的字符串可能不是最优选择。不过作为学习用途,这个实现是可以接受的。

- 代码没有处理输入字符串长度超过99的情况,如果输入超过99个字符,会导致数组越界。可以考虑限制输入长度或使用更安全的输入方式。