#include <iostream>
#include <array>
#include <algorithm>
#include <cstring>
using namespace std;
int main() {
array<char, 20> test{"HelloWorld"}, tmp;
// method 1
tmp = test;
sort(tmp.begin(), tmp.begin() + strlen(tmp.begin()));
cout << "result: " << tmp.data() << endl;
// method 2
tmp = test;
sort(tmp.begin(), tmp.end());
cout << "result: " << tmp.data() << endl;
return 0;
}
std::array
方法1でソートできます。しかし、それはとても醜いです。
私は方法2を好みますが、何も返されません。どうしたんだ?
2番目の方法は、すべての\0
要素を前面に並べ替えることです。(彼らは他のどのキャラクターよりも少ないです。
あなたはそれを試してみて、印刷するときに.data()
、あなたが得るchar const*
ストリームクラスにC-文字列のように扱われているオブジェクトのバックを。これはnullで終了する文字列です。最初の文字はnullであるため、何も出力されません。
あなたはで修正することができます
auto cmp = [](char a, char b) { return a != '\0' && a<b; }
sort(tmp.begin(), tmp.end(), cmp);
これは\0
、最後にソートするコンパレータを使用します。
しかし、ジェリー・コフィンがコメントで言ったように、そうでstd::array
はありませんstd::string
-あなたのニーズに合ったものを使用してください(おそらくstd::string
この場合)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加