以下程序使用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 **然后被取消引用?
答案 0 :(得分:1)
qsort传递元素的指针。您将sa作为char**
传递,因此每个元素都为char*
,qsort传递char**
,最后您在sort函数中得到char**
。
答案 1 :(得分:0)
您的元素为char *
,因此您应更改char *
上的空格并获取char *
的指针,即char **
。同时strcmp需要char *
。