Sortieren einer Zeichenkette in C++
-
Verwenden Sie den
std::sort
-Algorithmus, um die Zeichenkette in C++ zu sortieren - Verwenden Sie den Wrapper für benutzerdefinierte Funktionen, um die Zeichenkette in C++ zu sortieren
In diesem Handbuch werden verschiedene Methoden zum Sortieren einer Zeichenkette in C++ erläutert.
Verwenden Sie den std::sort
-Algorithmus, um die Zeichenkette in C++ zu sortieren
In diesem Artikel gehen wir davon aus, dass die Zeichenkette in einem std::string
-Objekt gespeichert ist. Da das Klassenobjekt std::string
iterierbar ist, können wir beliebige bereichsbasierte STL-Funktionen darauf aufrufen. In diesem Fall verwenden wir für jeden String die Funktion std::sort
aus den STL-Algorithmen. Hier verwenden wir die einfachste Überladung der Funktion std::sort
, die zwei Iteratorargumente benötigt, um den Bereich zu durchqueren und die Elemente standardmäßig in nicht absteigender Reihenfolge zu sortieren.
#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;
}
Ausgabe:
aabghiillmorrrsty;
ccceenorrsu;
-acceeefiiiilmmnnoppstt;
bceinorttu;
aaceiiilnopstz;
Alternativ können wir die benutzerdefinierte Komparatorfunktion an den std::sort
-Algorithmus übergeben, um die Elemente entsprechend zu sortieren. Beachten Sie, dass der Funktionsprototyp folgende Form haben sollte: bool cmp(const Type1 &a, const Type2 &b);
. Im folgenden Beispielcode verwenden wir den Lambda-Ausdruck, um die Sortierreihenfolge in absteigend umzukehren.
#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;
}
Ausgabe:
ytsrrromlliihgbaa ;
usrroneeccc;
ttspponnmmliiiifeeecca-;
uttroniecb;
ztsponliiiecaa;
Verwenden Sie den Wrapper für benutzerdefinierte Funktionen, um die Zeichenkette in C++ zu sortieren
Ein auffälliger Fehler der vorherigen Lösung besteht darin, dass die Interpunktion und der Abstand von Zeichen nicht von den gültigen alphanumerischen Zeichen unterschieden werden können. Wir können also eine separate Funktion implementieren, bei der wir alle Satz- und Leerzeichen aus dem angegebenen string
-Objekt verwerfen und dann den std::sort
-Algorithmus aufrufen, um die Sortieroperation durchzuführen. Der Entfernungsvorgang erfolgt mit dem Idiom erase-remove_if
, das einen Lambda-Ausdruck benötigt, um den Typ jedes Zeichens zu überprüfen. Die Funktionen isspace
und ispunct
werden in der Header-Datei <locale>
verwendet.
#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;
}
Ausgabe:
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 FacebookVerwandter Artikel - C++ String
- Finden Sie das erste sich wiederholende Zeichen in einer Zeichenfolge in C++
- Finden Sie die längste gemeinsame Teilzeichenfolge in C++
- Großschreiben des ersten Buchstabens einer Zeichenfolge in C++
- Vergleich von String und Character in C++
- Entfernen Sie das letzte Zeichen aus einer Zeichenkette in C++
- Abrufen des letzten Zeichens einer Zeichenkette in C++