比较 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)中恰好分别是 785B6A5D
和 785B695D
,这是粘合在一起的这些字符的 ASCII 码。因此 if
永远不会执行。另外,"didn't work"是什么意思?你有编译错误吗?如果是,它说了什么?否则你可能已经超过了时间限制,因为冒泡排序非常慢。
我正在尝试排列这个只包含数字的字符数组,它按我输入的顺序打印相同的数组,没有任何改变,我尝试在 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)中恰好分别是 785B6A5D
和 785B695D
,这是粘合在一起的这些字符的 ASCII 码。因此 if
永远不会执行。另外,"didn't work"是什么意思?你有编译错误吗?如果是,它说了什么?否则你可能已经超过了时间限制,因为冒泡排序非常慢。