2017-05-25 33 views
1

我试图排序字符的C中的阵列冒泡排序的字符数组进行排序,但它打印出相同的数组,而不是分选的无法通过在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中,4小时。

+1

使用替换if((int)P[k]>=(int)P[k+1])'strcmp'代替'> ='('>')。 – BLUEPIXY

+0

@BLUEPIXY:嗨,你能为我编辑这个吗?我尝试使用STRCMP和它打印出整个阵列以相反的顺序,不知道我要去的地方错在这里:\ –

+1

阅读[STRCMP(http://en.cppreference.com/w/c/string/byte/ strcmp) – BLUEPIXY

回答

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(cmp(P[k], P[k+1]) > 0)

+0

嗨,非常感谢。只是另一个问题,当我尝试用不同的数组运行它时,代码失败,例如{1a 1c 2a 2f 1d},它出于2a 1d“whitespace”2f。任何想法为什么? –

+0

@StackOverflow请参阅[DEMO](http://ideone.com/jD2Bu0) – BLUEPIXY