比较 char 数组元素

Comparing char array elements

我正在尝试排列这个只包含数字的字符数组,它按我输入的顺序打印相同的数组,没有任何改变,我尝试在 if 语句中使用类型转换,它给了我正确的结果运行 但是没有被在线接受 judge.what 是这里的错误,为什么我的第二个解决方案没有被接受?

#include <stdio.h>
#include <string.h>
int main() {
    char x[101];
    scanf("%s",x);
    int l,i,j ;

    l = strlen(x);

    char temp ;

    for(i=0;x[i];i++)
    {
        for( j=i ; x[j] ; j++){

            if('x[j]'<'x[i]') //(int)x[j] and (int)x[i] didn't work on the 
                               //online judge
            {
                temp=x[i];
                x[i]=x[j];
                x[j]=temp;

            }
        }
    }

    printf("%s",x);
    return 0 ;
}

我不知道为什么数组元素周围有引号,但这不是你想的那样,进行比较是因为多字符字符串被评估为实现定义的整数值,因此 if 语句是总是比较相同的值,这意味着它总是会给出相同的结果,你需要去掉引号

if (x[j] < x[i])

此外,我建议将数组的长度指定为 scanf() 并检查它是否成功读取值,就像这样

if (scanf("%100s", x) != 1)
    return -1; /* Perhaps EOF, i.e. you pressed Ctrl+D or (Ctrl+Z MS Windows) */

如果你不检查你的程序将调用未定义的行为,如果这里它不会伤害你的简单程序的任何关键部分,如果你不学习这样做,那么你会有很多将来编写更大的程序时很难调试错误。

您的 if 语句中的引号计算为多字符常量,在我的编译器(VC++ 2013)中恰好分别是 785B6A5D785B695D,这是粘合在一起的这些字符的 ASCII 码。因此 if 永远不会执行。另外,"didn't work"是什么意思?你有编译错误吗?如果是,它说了什么?否则你可能已经超过了时间限制,因为冒泡排序非常慢。