根据这个 site ,我完成了以下对字符串进行排序的程序。

#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char list[5][4]={"dat","mai","lik","mar","ana"};
int main(int argc, char *argv[])
{
    int x;
    puts("sortirebamde:");
     for (x=0;x>sizeof(list)/sizeof(char);x++)
     printf("%s\n",list[x]);
      qsort(&list,(sizeof(list)/sizeof(char)),sizeof(list[0]),strcmp);
    system("PAUSE");
    return EXIT_SUCCESS;
}
这是我得到的错误
13 C:\Documents and Settings\LIBRARY\Desktop\string_sortireba.cpp invalid conversion from `int (*)(const char*, const char*)' to `int (*)(const void*, const void*)'
13 C:\Documents and Settings\LIBRARY\Desktop\string_sortireba.cpp   initializing argument 4 of `void qsort(void*, size_t, size_t, int (*)(const void*, const void*))'
请帮忙

最佳答案

请注意:将 C 字符串存储在二维字符数组中是不常见的。有 char *ary[] 比较正常,比如 argv。该类型不能直接使用 qsortstrcmp 排序,因为 qsort 会将 char ** 而不是 char * 传递给比较函数。这有利于提高效率,可以交换指针而不是整个字符串。 Linux manpage for qsort 有一些很好的示例代码,带有正确的比较函数。

您不能将 strcmp 直接传递给 qsort 作为其比较函数,因为 qsort 期望传递指向 void 的指针,而 strcmp 期望指向 const char 的指针。鉴于指向 void 的指针和指向 char 的指针之间所需的相似性,您可能可以使用强制转换(对于您的代码)来实现,但更简洁的方法是编写一个采用正确类型的函数:

int cmpstr(void const *a, void const *b) {
    char const *aa = (char const *)a;
    char const *bb = (char const *)b;

    return strcmp(aa, bb);
}

但是请注意,在 C++ 中,您通常希望使用 std::sort 而不是 qsort ,并且可能使用 std::string 而不是 char * ,在这种情况下,排序会变得更简单(通常也会更快)。

关于c++ - 使用 qSort 对字符串进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3757899/

10-15 02:11