2010-10-30 60 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);