Ordenar una cadena de caracteres en C++
- 
          
            Utilice el algoritmo std::sortpara ordenar la cadena de caracteres en C++
- Utilice el contenedor de funciones personalizadas para ordenar la cadena de caracteres en C++
 
Esta guía explicará varios métodos de cómo ordenar una cadena de caracteres en C++.
Utilice el algoritmo std::sort para ordenar la cadena de caracteres en C++
    
En este artículo, asumimos que la secuencia de caracteres se almacena en un objeto std::string. Dado que el objeto de la clase std::string es iterable, podemos llamar a cualquier función STL basada en rangos en él. En este caso, usamos la función std::sort de los algoritmos STL en cada cadena. Aquí, utilizamos la sobrecarga más simple de la función std::sort, que toma dos argumentos de iterador para recorrer el rango y ordenar los elementos por defecto en orden no descendente.
#include <algorithm>
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;
template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << "; " << endl;
  }
  cout << endl;
}
int main() {
  vector<string> vec1 = {"algorithms library", "occurrences",
                         "implementation-specific", "contribute",
                         "specialization"};
  for (auto &item : vec1) {
    sort(item.begin(), item.end());
  }
  printVector(vec1);
  return EXIT_SUCCESS;
}
Producción :
aabghiillmorrrsty;
ccceenorrsu;
-acceeefiiiilmmnnoppstt;
bceinorttu;
aaceiiilnopstz;
Alternativamente, podemos pasar la función de comparación personalizada al algoritmo std::sort para ordenar los elementos en consecuencia. Tenga en cuenta que el prototipo de la función debe tener la siguiente forma: bool cmp(const Type1 &a, const Type2 &b);. En el siguiente código de ejemplo, utilizamos la expresión lambda para invertir el orden de clasificación a descendente.
#include <algorithm>
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;
template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << "; " << endl;
  }
  cout << endl;
}
int main() {
  vector<string> vec1 = {"algorithms library", "occurrences",
                         "implementation-specific", "contribute",
                         "specialization"};
  for (auto &item : vec1) {
    sort(item.begin(), item.end(), [](auto &c1, auto &c2) { return c1 > c2; });
  }
  printVector(vec1);
  return EXIT_SUCCESS;
}
Producción :
ytsrrromlliihgbaa ;
usrroneeccc;
ttspponnmmliiiifeeecca-;
uttroniecb;
ztsponliiiecaa;
Utilice el contenedor de funciones personalizadas para ordenar la cadena de caracteres en C++
Un defecto notable de la solución anterior es que no puede distinguir la puntuación y el espaciado de los caracteres de los caracteres alfanuméricos válidos. Entonces, podemos implementar una función separada donde descartamos todos los caracteres de puntuación y espacio del objeto string dado y luego llamamos al algoritmo std::sort para realizar la operación de clasificación. La operación de eliminación se realiza utilizando el idioma erase-remove_if, que toma una expresión lambda para verificar el tipo de cada carácter. Las funciones isspace e ispunct se utilizan incluidas en el archivo de encabezado <locale>.
#include <algorithm>
#include <iostream>
#include <locale>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;
template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << "; " << endl;
  }
  cout << endl;
}
void sortStringChars(string &s) {
  s.erase(std::remove_if(
              s.begin(), s.end(),
              [](auto &c) { return std::isspace(c) || std::ispunct(c); }),
          s.end());
  sort(s.begin(), s.end());
}
int main() {
  vector<string> vec1 = {"algorithms library", "occurrences",
                         "implementation-specific", "contribute",
                         "specialization"};
  for (auto &item : vec1) {
    sortStringChars(item);
  }
  printVector(vec1);
  return EXIT_SUCCESS;
}
Producción :
aabghiillmorrrsty;
ccceenorrsu;
acceeefiiiilmmnnoppstt;
bceinorttu;
aaceiiilnopstz;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArtículo relacionado - C++ String
- Encuentre el primer carácter repetido en una cadena en C++
- Encuentre la subcadena común más larga en C++
- Poner en mayúscula la primera letra de una cadena en C++
- Comparación de cadenas y caracteres en C++
- Eliminar el último carácter de una cadena en C++
- Obtener el último carácter de una cadena en C++
