2012-02-02 21 views
55

Si tengo una cadena, ¿hay una función incorporada para ordenar los caracteres o tendré que escribir la mía?Ordenando Caracteres de una Cadena de C++

por ejemplo:

string word = "dabc"; 

me gustaría cambiarlo de modo que:

string sortedWord = "abcd"; 

Tal vez el uso de carbón es una mejor opción? ¿Cómo haría esto en C++?

+7

¿Qué hay de 'std :: sort'? – dreamlax

+0

Tenga en cuenta que cualquier tipo de clasificación basada en el valor de ingenuo carácter se rompe con UTF-8. Dependiendo de sus cadenas, es posible que desee tener en cuenta la configuración regional. –

Respuesta

101

Hay a sorting algorithm en la biblioteca estándar, en la cabecera <algorithm>. Se ordena en el lugar, por lo que si haces lo siguiente, tu palabra original será clasificada.

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

gracias, me siento estúpido ahora, demasiado php ... – gprime

+0

¿Qué pasa si queremos que la cadena se ordene en orden creciente? – madhuspot

+2

@madhuspot 'std :: sort' se ordena en orden alfabético de forma predeterminada. Supongamos que se trata de un error tipográfico menor y quiere ** de ** orden de plegado, use la versión de 'std :: sort' que toma' Compare' como su tercer argumento y suministra 'std :: greater' en lugar del' std predeterminado :: menos'. 'std :: string' utiliza el tipo' char' de manera predeterminada, por ejemplo, 'std :: sort (sortedWord.begin(), sortedWord.end(), std :: greater ()); '- eso daría un resultado de" dcba "en la pregunta original en lugar de" abcd ". – Tommy

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

Ver here

+10

Esta es la mejor manera ... SI la cadena está usando una codificación de un solo byte. De lo contrario, separarás los caracteres en sus bytes componentes. –

+0

@BenVoigt: excelente punto! – dreamlax

1

tiene que incluir sort función que se encuentra en algorithm archivo de cabecera que es una standard template library 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

0

Puede utilizar sort() función. existe sort() en el archivo de algorithm cabecera

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

de salida:

achklors

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

cómo se va a ejecutar internamente por favor explique la lógica

+0

No entiendo su observación "cómo se ejecutará internamente, explique la lógica". –

Cuestiones relacionadas