Bir C ++ Dizesinin Karakterlerini Sıralama


86

Bir dizem varsa, karakterleri sıralamak için yerleşik bir işlev var mı yoksa kendi dizimi mi yazmam gerekir?

Örneğin:

string word = "dabc";

Bunu şu şekilde değiştirmek isterdim:

string sortedWord = "abcd";

Belki de char kullanmak daha iyi bir seçenektir? Bunu C ++ 'da nasıl yaparım?


7
Peki ya std::sort?
dreamlax 02

Herhangi bir tür saf karakter değeri tabanlı sıralamanın UTF-8 ile bozulduğunu unutmayın - dizelerinize bağlı olarak yerel ayarı dikkate almak isteyebilirsiniz.
Christian Severin

Yanıtlar:


149

Orada bir sıralama algoritması başlığında standart kütüphanede, <algorithm>. Yerinde sıralar, böylece aşağıdakileri yaparsanız, orijinal kelimeniz sıralanır.

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

Orijinali kaybetmek istemiyorsanız, önce bir kopya oluşturun.

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

Dizenin artan sırada sıralanmasını istersek ne olur?
The Room

3
@madhuspot std::sort, varsayılan olarak alfabetik olarak artan sırada sıralar. Düşünürsek küçük yazım hatası var ve istediğiniz de sürüm kullanın düzeni kırışmasını std::sortbir sürer Compareüçüncü argüman olarak ve tedarik std::greatervarsayılan yerine std::less. türü varsayılan olarak std::stringkullanır, charbu nedenle örneğin std::sort(sortedWord.begin(), sortedWord.end(), std::greater<char>());- orijinal soruda "abcd" yerine "dcba" sonucunu verir.
Tommy

3
@madhuspot veya std kullanın :: reverse
Vincent

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

Buraya bakın


10
Bu en iyi yoldur ... EĞER dizge tek bayt kodlaması kullanıyorsa. Aksi takdirde karakterleri bileşen baytlarına bölersiniz.
Ben Voigt

2

Sen eklemek zorunda sortolduğunu fonksiyonunu algorithmbir olan başlık dosyasına standart şablon kütüphanesi c ++.

Kullanım : 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;
}

ÇIKTI:

abcd


1

Sort () işlevini kullanabilirsiniz . sort () algoritma başlık dosyasında var

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

Çıktı:

Achklors

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.