我正在尝试对C中的字符数组进行排序,但它会打印出相同的数组而不是排序的
char*P[5] = {"1c", "4h", "3g", "10g"};
total_items = 4; // number of elements in the array.
for(int q =1; q<total_items; q++)
{
for(int k=0; k<total_items-q; k++)
{
if((int)P[k]>=(int)P[k+1])
{
temp=P[k];
P[k]=P[k+1];
P[k+1]=temp;
}
}
}
当我打印出阵列时,它与原始阵列相同。我试着在if语句中打印调试;事实证明它永远不会进入代码的交换块。有什么我想念的吗?
预期输出应为1c,3g,10g,4h。
答案 0 :(得分:1)
创建自己的比较功能。
像这样:int cmp(const char *a, const char *b){
int ai, bi;
char ac, bc;
sscanf(a, "%d%c", &ai, &ac);//Separate number and letter
sscanf(b, "%d%c", &bi, &bc);
if(ac > bc)
return 1;
else if(ac < bc)
return -1;
return ai < bi ? -1 : ai > bi;
}
然后将if((int)P[k]>=(int)P[k+1])
替换为if(cmp(P[k], P[k+1]) > 0)