Clasificación de caracteres de una cadena C ++

82

Si tengo una cadena, ¿hay una función incorporada para ordenar los caracteres o tendría que escribir la mía propia?

por ejemplo:

string word = "dabc";

Me gustaría cambiarlo para que:

string sortedWord = "abcd";

¿Quizás usar char es una mejor opción? ¿Cómo haría esto en C ++?

gprime
fuente
7
¿Qué hay de std::sort?
dreamlax
Tenga en cuenta que cualquier tipo de ordenación basada en valores de caracteres ingenuos se rompe con UTF-8; dependiendo de sus cadenas, es posible que desee tener en cuenta la configuración regional.
Christian Severin

Respuestas:

146

Hay un algoritmo de clasificación en la biblioteca estándar, en el encabezado <algorithm>. Se ordena en su lugar, por lo que si hace lo siguiente, su palabra original se ordenará.

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

Si no quiere perder el original, primero haga una copia.

std::string sortedWord = word;
std::sort(sortedWord.begin(), sortedWord.end());
R. Martinho Fernandes
fuente
¿Qué pasa si queremos que la cadena se clasifique en orden creciente?
The Room
3
@madhuspot std::sortordena en orden alfabético creciente de forma predeterminada. Suponiendo que es un error tipográfico de menor importancia y que desea de orden plegado, utilice la versión de std::sortque toma una Comparecomo su tercer argumento y el suministro std::greateren lugar del predeterminado std::less. std::stringusa el chartipo por defecto, por ejemplo std::sort(sortedWord.begin(), sortedWord.end(), std::greater<char>());, eso daría un resultado de "dcba" en la pregunta original en lugar de "abcd".
Tommy
3
@madhuspot o use std :: reverse
Vincent
15
std::sort(str.begin(), str.end());

Ver aqui

Dreamlax
fuente
10
Esta es la mejor manera ... SI la cadena usa una codificación de un solo byte. De lo contrario, dividirá los caracteres en sus bytes componentes.
Ben Voigt
2

Debe incluir la sortfunción que se encuentra en el algorithmarchivo de encabezado, que es una biblioteca de plantillas estándar en c ++.

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

SALIDA:

abcd

abe312
fuente
1

Puede utilizar la función sort () . sort () existe en el archivo de encabezado del algoritmo

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

Salida:

achklors

rashedcs
fuente