qsort関数を使用して、C++を使用して文字列の文字を並べ替える必要があります。C++で文字列にqsortを使用する方法
#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;
}
しかし、それはスロー:
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*))'
誰もがこれを行うための効率的な方法を提供することができればそれは素晴らしいことです。
ようになり、
bool
value.For例を返す関数になります? – Rapptz'std :: sort'はmergesortやquicksortのようなアルゴリズムを使います。これは' string'のようなシーケンスをソートするのには効率が悪いです。一般的な場合に漸近的に最適な 'radix sort'のような代替案を考えてみましょう。 – akappa