C ++文字列の文字の並べ替え


86

文字列がある場合、文字を並べ替えるための組み込み関数がありますか、それとも自分で作成する必要がありますか?

例えば:

string word = "dabc";

次のように変更したいと思います。

string sortedWord = "abcd";

たぶんcharを使用する方が良いオプションですか?C ++でこれを行うにはどうすればよいですか?


7
どうstd::sortですか?
dreamlax 2012

単純なchar値ベースのソートはUTF-8で機能しないことに注意してください。文字列によっては、ロケールを考慮に入れる必要がある場合があります。
クリスチャンセヴェリン

回答:


149

標準ライブラリのヘッダーにソートアルゴリズムがあり<algorithm>ます。インプレースで並べ替えられるため、次のようにすると、元の単語が並べ替えられます。

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

オリジナルを失いたくない場合は、最初にコピーを作成してください。

std::string sortedWord = word;
std::sort(sortedWord.begin(), sortedWord.end());

文字列を昇順で並べ替える場合はどうなりますか?
ルーム

3
@madhuspotはstd::sort、デフォルトでアルファベットの昇順で並べ替えます。仮にそれがマイナーのタイプミスだとあなたが欲しい折り目順序を、バージョンの使用std::sortとるCompare3番目の引数と電源としてstd::greaterの代わりに、デフォルトをstd::less。デフォルトで型をstd::string使用するcharため、たとえばstd::sort(sortedWord.begin(), sortedWord.end(), std::greater<char>());—元の質問では「abcd」ではなく「dcba」の結果が得られます。
トミー

3
@madhuspotまたは使用のstd ::逆
ヴィンセント

15
std::sort(str.begin(), str.end());

こちらをご覧ください


10
これが最善の方法です...文字列がシングルバイトエンコーディングを使用している場合。それ以外の場合は、文字をコンポーネントバイトに分割します。
Ben Voigt 2012

2

C ++の標準テンプレートライブラリであるヘッダーファイルにあるsort関数をインクルードする必要があります。algorithm

使用法:std :: sort(str.begin()、str.end());

#include <iostream>
#include <algorithm>  // this header is required for std::sort to work
int main()
{
    std::string s = "dacb";
    std::sort(s.begin(), s.end());
    std::cout << s << std::endl;

    return 0;
}

出力:

abcd


1

sort()関数を使用できます。sort()がアルゴリズムヘッダーファイルに存在します

        #include<bits/stdc++.h>
        using namespace std;


        int main()
        {
            ios::sync_with_stdio(false);
            string str = "sharlock";

            sort(str.begin(), str.end());
            cout<<str<<endl;

            return 0;
        }

出力:

achklors

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.