2010-10-30 80 views
1

問題很簡單:有一些方法可以讓返回「qsort」的有序數組反向返回,即我想避免使用任何輔助數組來投資使用qsort生成的數組。在C中使用qSort排序的數組字符串

這是我的代碼,它從標準輸入字符串讀取進行排序,並使用比較函數進行排序。

#include <stdio.h> 
    #include <stdlib.h> 
    #include <unistd.h> 
    #include <stdio.h> 
    #include <string.h> 

      int cstring_cmp(const void *a, const void *b) 
      { 
       const char **ia = (const char **)a; 
       const char **ib = (const char **)b; 
       return strcasecmp(*ia, *ib); 
       /* strcmp functions works exactly as expected from 
       comparison function */ 
      } 

預先感謝您的回覆,對不起我的英語

  int main (int argc, char *argv []) 

      { 
      int number; 
      char temp [4000]; 

      printf("input number: "); 
      scanf("%d",&number); 

      char* array_string [number]; 
      int i; 
      for (i=0;i<number;i++) { 
      scanf(" %[^\n]", temp); 
      array_string [i] = (char*)malloc((strlen(temp)+1)*sizeof(char)); 
      strcpy(array_string[i], temp); 
      } 


      size_t large = sizeof(array_string)/sizeof(char *); 
      qsort(array_string,large ,sizeof(char *) ,cstring_cmp); 
      printf ("\n"); 
      printf ("the sorted array list is:\n"); 
      for (i=0;i<large;i++) 
      printf("%s\n", array_string [i]); 
        return 0; 
      } 
+0

return -1 * strcasecmp(* ia,* ib);可能會工作。如果反轉比較函數,則數組將被顛倒。 – 2010-10-31 00:02:27

回答

3

這是不是你想要做什麼?

 int cstring_cmp(const void *a, const void *b) 
     { 
      const char **ia = (const char **)a; 
      const char **ib = (const char **)b; 
      return -strcasecmp(*ia, *ib); 
      /* return the negative of the normal comparison */ 
     } 
4

你剛剛嘗試將參數順序顛倒到strcasecmp?

return strcasecmp(*ib, *ia);