1

下面的程序使用qsort()库函数对字符串的所有内容进行排序。

int sacomp(const void *a, const void *b) 
{
    return strcmp(*(const char**)a, *(const char**)b); <------------
}

void sort(string s) 
{
    int size = s.size();
    char const *data = s.c_str();
    char const **sa = new char const *[size+1];

    for(int i = 0; i < size; i++)
        sa[i] = data+i;

    qsort(sa, size, sizeof(sa[0]), sacomp); // O(n * Lon n)
}

int main() 
{
    string s("ABCCCDEFABBABBA");
    sort(s);

    return 0;
}

我无法理解该sacomp()方法中完成的铸造。

strcmp(*(const char**)a, *(const char**)b); 

为什么 a 被强制转换为 const char** 然后被取消引用?

4

2 回答 2

1

qsort 传递元素的指针。你传递了 sa as char**,所以每个元素都是char*,并且 qsort 传递char**了 ,最后你得到char**了 sort 函数。

于 2012-08-19T11:31:39.697 回答
0

您的元素是char *,因此您应该更改 void onchar *并获取指向 的指针char *,即char **. 同时strcmp需要char *

于 2012-08-19T11:35:39.760 回答