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