Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 比较字符数组元素_C_Arrays_Sorting_Char_Bubble Sort - Fatal编程技术网

C 比较字符数组元素

C 比较字符数组元素,c,arrays,sorting,char,bubble-sort,C,Arrays,Sorting,Char,Bubble Sort,我正在尝试排列这个只包含数字的字符数组,它以我输入的顺序打印相同的数组,没有任何更改,我尝试在if语句中使用类型转换,它在运行时给了我正确的结果,但在线法官不接受。这里有什么问题,为什么我的第二个解决方案不被接受 #include <stdio.h> #include <string.h> int main() { char x[101]; scanf("%s",x); int l,i,j ; l = strlen(x); ch

我正在尝试排列这个只包含数字的字符数组,它以我输入的顺序打印相同的数组,没有任何更改,我尝试在if语句中使用类型转换,它在运行时给了我正确的结果,但在线法官不接受。这里有什么问题,为什么我的第二个解决方案不被接受

#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 ;
}
#包括
#包括
int main(){
charx[101];
scanf(“%s”,x);
int l,i,j;
l=strlen(x);
焦炭温度;
对于(i=0;x[i];i++)
{
对于(j=i;x[j];j++){

if('x[j]“我不知道为什么数组元素周围会有引号,但这并不是你想的那样,之所以会进行比较,是因为多字符字符串的计算结果是实现定义的整数值,因此if语句总是比较相同的值,这意味着它总是给出同样的结果,您需要删除引号

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

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

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

这是什么
'x[j]'
?它是一个多字符常量,很可能不是您想要的。另外,
l=strlen(x)
然后你删除
l
,删除它。我想它会将字符更改为一个整数,表示这个字符的ascii,就像她所说的那样,这样我可以比较它们。你能详细说明一下吗?@OmarKhaled尽你所能,但这毫无意义。因为这些是常量字符串,所以它几乎等同于
if(false)
在这种情况下。@szczurcio我认为不可能确保它是
if(false)
,因为该值是实现定义的,所以理论上可能存在一个编译器,其中它是
if(true)
@iharob是的,你是对的,我只是根据我的案例中的内容来评论。重点是这个值是常量,所以检查它是没有意义的。好吧,这个代码是用于在线判断问题的,所以虽然这样的检查是一个很好的做法,但在这种情况下,这是浪费时间,因为没有人会给代码提供无效的输入。@OmarKhaled你可以通过点击复选标记接受答案,我希望您理解我的解释,否则请随时要求澄清。不,我从测试1中得到错误答案法官的编译器返回我代码的输出,即使在我进行了您告诉我的更正后,示例测试案例中的编译器也与我的编译器不同
if (scanf("%100s", x) != 1)
    return -1; /* Perhaps EOF, i.e. you pressed Ctrl+D or (Ctrl+Z MS Windows) */