Zeichenketten alphabetisch sortieren in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden des std::sort-Algorithmus zum alphabetischen Sortieren von Zeichenketten in C++
  2. Verwendung des std::sort-Algorithmus zum Sortieren von Zeichenketten nach Länge in C++
Zeichenketten alphabetisch sortieren in C++

Dieser Artikel zeigt verschiedene Methoden zum alphabetischen Sortieren von Zeichenketten in C++.

Verwenden des std::sort-Algorithmus zum alphabetischen Sortieren von Zeichenketten in C++

std::sort ist Teil der STL-Algorithmusbibliothek und implementiert eine generische Sortiermethode für die bereichsbasierten Strukturen. Die Funktion sortiert normalerweise die angegebene Sequenz mit dem operator<; Daher können Zeichenkettenobjekte mit diesem Standardverhalten alphabetisch sortiert werden. std::sort akzeptiert nur Bereichsspezifizierer - den ersten und den letzten Elementiterator. Beachten Sie, dass die Reihenfolge gleicher Elemente nicht garantiert erhalten bleibt.

Im folgenden Beispiel zeigen wir das grundlegende Szenario, in dem der Vektor von Zeichenketten sortiert und in den Stream cout gedruckt wird.

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

int main() {
  vector<string> arr = {
      "raid",         "implementation", "states", "all", "the",
      "requirements", "parameter",      "a",      "and", "or",
      "execution",    "participate"};

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  sort(arr.begin(), arr.end());

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  exit(EXIT_SUCCESS);
}

Ausgabe:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; all; and; execution; implementation; or; parameter; participate; raid; requirements; states; the;

Alternativ können wir das optionale dritte Argument in der Methode std::sort verwenden, um die genaue Vergleichsfunktion anzugeben. In diesem Fall haben wir das vorherige Codebeispiel erneut implementiert, um die letzten Buchstaben aus den Zeichenketten zu vergleichen und entsprechend zu sortieren. Beachten Sie, dass die Vergleichsfunktion zwei Argumente haben und einen bool-Wert zurückgeben sollte. Im nächsten Beispiel wird der Lambda-Ausdruck als Vergleichsfunktion verwendet, und die integrierte Funktion back wird verwendet, um die letzten Buchstaben der Zeichenketten abzurufen.

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

int main() {
  vector<string> arr = {
      "raid",         "implementation", "states", "all", "the",
      "requirements", "parameter",      "a",      "and", "or",
      "execution",    "participate"};

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  sort(arr.begin(), arr.end(),
       [](string &s1, string &s2) { return s1.back() < s2.back(); });

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  exit(EXIT_SUCCESS);
}

Ausgabe:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; raid; and; the; participate; all; implementation; execution; parameter; or; states; requirements;

Verwendung des std::sort-Algorithmus zum Sortieren von Zeichenketten nach Länge in C++

Ein weiterer nützlicher Fall zum Sortieren des Vektors von Zeichenketten ist nach ihrer Länge. Wir werden die gleiche Struktur der Lambda-Funktion wie im vorherigen Beispielcode verwenden und nur die back-Methode durch die size ändern. Beachten Sie jedoch, dass diese Vergleichsfunktion die an sie übergebenen Objekte nicht ändern darf.

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

int main() {
  vector<string> arr = {
      "raid",         "implementation", "states", "all", "the",
      "requirements", "parameter",      "a",      "and", "or",
      "execution",    "participate"};

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  sort(arr.begin(), arr.end(),
       [](string &s1, string &s2) { return s1.size() < s2.size(); });

  for (const auto &item : arr) {
    cout << item << "; ";
  }
  cout << endl;

  exit(EXIT_SUCCESS);
}

Ausgabe:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; or; all; the; and; raid; states; parameter; execution; participate; requirements; implementation;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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 Facebook

Verwandter Artikel - C++ Sorting