c - qsort 反转字符串的顺序

标签 c arrays string qsort

我正在尝试使用 qsort 按字母顺序对字符串进行排序。目前它似乎只是颠倒了我的字符串的顺序。

printf("unsorted %s\n", string);
qsort(string, strlen(string), sizeof(char), compare);
printf("sorted %s\n", string);

string 是字符串“ACBD”。第二个 printf 将其显示为“DBCA”。我的比较函数是,

compare(const void *a1, const void *b1){
     const int *a2 = a1;
     const int *b2 = b1;

     if(*a2 == *b2){
         return 0;
     }
     else{
         if(*a2 < *b2){
             return -1;
         }
         else{
             return 1;
         }
    }
}

我确定我正在做一些非常愚蠢的事情,但我们将不胜感激。

编辑:字符串声明为 char string[1000]

最佳答案

您想进行字符比较,但实际上是在进行整数比较 (sizeof int > sizeof char)。

修复如下:

 char *a2 = a1;
 char *b2 = b1;

关于c - qsort 反转字符串的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18224979/

相关文章:

c - 在循环中使用 `fwrite` 是好习惯吗?

C++ 做它想做的事 | Char[] cout 和 inverted char[]

使用 format 命令进行 python 字符串操作

c - 赋值表达式和 volatile

c++ - 如果用新版本覆盖共享库(当前由程序映射)会发生什么?

javascript - 关于将 javascript 中的数组插入 HTML 中的段落元素的基本帮助

javascript - 在javascript中选择性地填充数组

python - 如何使用 numpy.argsort() 作为二维以上的索引?

java - String的子串函数与StringBuffer的子串函数

c - 是否有必要在函数中取消定义宏?