如何在C++中使用qsort for string

dja*_*min 5 c++ qsort

我想使用qsort函数使用C++对字符串中的字符进行排序.

#include<iostream>
#include<string>
#include<cstdlib>

using namespace std;

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

    if(*aa==*bb) return 0;
    else if(*aa>*bb) return 1;
    else return -1;
}
int main(){

    string str="cake";
    int len=str.length();

    qsort(str,len,sizeof(str[0]),compare_str);
    cout<<str;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但它抛出:

20 42 [Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'void*' for argument '1' to 'void qsort(void*, size_t, size_t, int (*)(const void*, const void*))' 
Run Code Online (Sandbox Code Playgroud)

如果有人能提供一种有效的方法来做到这一点会很棒.

小智 15

我强烈推荐现代方法

#include <algorithm>
#include <iostream>
#include <string>

int main()
{
    std::string s("cake");

    std::sort(s.begin(), s.end());

    std::cout << s << std::endl; // Prints "acek".

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另外,使用std::sortover qsort可以让编译器更好地优化,所以这是一个双赢的...