Sortieren von Zeichen eines C ++ - Strings


82

Wenn ich einen String habe, gibt es eine eingebaute Funktion zum Sortieren der Zeichen oder müsste ich meine eigene schreiben?

zum Beispiel:

string word = "dabc";

Ich würde es so ändern wollen, dass:

string sortedWord = "abcd";

Vielleicht ist die Verwendung von char eine bessere Option? Wie würde ich das in C ++ machen?


7
Was ist mit std::sort?
Dreamlax

Beachten Sie, dass jede Art von naiver, auf Zeichenwerten basierender Sortierung mit UTF-8 unterbrochen wird - abhängig von Ihren Zeichenfolgen möchten Sie möglicherweise das Gebietsschema berücksichtigen.
Christian Severin

Antworten:


145

In der Standardbibliothek im Header befindet sich ein Sortieralgorithmus<algorithm> . Es wird an Ort und Stelle sortiert. Wenn Sie also Folgendes tun, wird Ihr ursprüngliches Wort sortiert.

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

Wenn Sie das Original nicht verlieren möchten, erstellen Sie zuerst eine Kopie.

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

Was ist, wenn die Zeichenfolge in aufsteigender Reihenfolge sortiert werden soll?
Der Raum

3
@madhuspot std::sortsortiert standardmäßig in alphabetisch aufsteigender Reihenfolge. Das ist ein kleiner Tippfehler Gesetzt und Sie wollen de Um Knittern, verwenden Sie die Version , std::sortdass ein nimmt Compareals drittes Argument und liefern std::greateranstelle des Standard std::less. std::stringverwendet charstandardmäßig den Typ, z. B. std::sort(sortedWord.begin(), sortedWord.end(), std::greater<char>());- das würde ein Ergebnis von "dcba" in der ursprünglichen Frage anstelle von "abcd" ergeben.
Tommy

3
@ Madhuspot oder verwenden Sie std :: reverse
Vincent

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

Siehe hier


10
Dies ist der beste Weg ... WENN die Zeichenfolge eine Einzelbyte-Codierung verwendet. Andernfalls werden Sie Zeichen in ihre Komponentenbytes aufteilen.
Ben Voigt

2

Sie müssen eine sortFunktion in die algorithmHeader-Datei aufnehmen, die eine Standardvorlagenbibliothek in C ++ ist.

Verwendung : 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;
}

AUSGABE:

abcd


1

Sie können die Funktion sort () verwenden. sort () existiert in der Algorithmus- Header-Datei

        #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;
        }

Ausgabe:

Achklors

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.