Trier une chaîne de caractères en C++
-
Utilisez l’algorithme
std::sort
pour trier la chaîne de caractères en C++ - Utilisez le wrapper de fonction personnalisée pour trier la chaîne de caractères en C++
Ce guide expliquera plusieurs méthodes pour trier une chaîne de caractères en C++.
Utilisez l’algorithme std::sort
pour trier la chaîne de caractères en C++
Dans cet article, nous supposons que la séquence de caractères est stockée dans un objet std::string
. Puisque l’objet de classe std::string
est itérable, nous pouvons appeler n’importe quelle fonction STL basée sur une plage. Dans ce cas, nous utilisons la fonction std::sort
des algorithmes STL sur chaque chaîne. Ici, nous utilisons la surcharge la plus simple de la fonction std::sort
, qui prend deux arguments d’itérateur pour parcourir la plage et trier les éléments par défaut dans l’ordre non décroissant.
#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;
}
Production:
aabghiillmorrrsty;
ccceenorrsu;
- acceeefiiiilmmnnoppstt;
bceinorttu;
aaceiiilnopstz;
Alternativement, nous pouvons passer la fonction de comparateur personnalisé à l’algorithme std::sort
pour trier les éléments en conséquence. Notez que le prototype de fonction doit avoir la forme suivante : bool cmp(const Type1 &a, const Type2 &b);
. Dans l’exemple de code suivant, nous utilisons l’expression lambda pour inverser l’ordre de tri en ordre décroissant.
#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;
}
Production:
ytsrrromlliihgbaa;
usrroneeccc;
ttspponnmmliiiifeeecca - ;
uttroniecb;
ztsponliiiecaa;
Utilisez le wrapper de fonction personnalisée pour trier la chaîne de caractères en C++
Un défaut notable de la solution précédente est qu’elle ne peut pas distinguer la ponctuation et l’espacement des caractères des caractères alphanumériques valides. Ainsi, nous pouvons implémenter une fonction distincte dans laquelle nous supprimons tous les caractères de ponctuation et d’espace de l’objet string
donné, puis appelons l’algorithme std::sort
pour effectuer l’opération de tri. L’opération de suppression se fait à l’aide de l’idiome erase-remove_if
, qui prend une expression lambda pour vérifier le type de chaque caractère. Les fonctions isspace
et ispunct
sont utilisées depuis le fichier d’en-tête <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;
}
Production:
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 FacebookArticle connexe - C++ String
- Comparaison de chaîne et de caractère en C++
- Supprimer le dernier caractère d'une chaîne en C++
- Obtenir le dernier caractère d'une chaîne en C++
- Différences entre l'opérateur sizeof et la fonction strlen pour les chaînes en C++
- Effacer la chaîne en C++
- Imprimer toutes les permutations de la chaîne en C++