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 ++?


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());

¿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


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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.