Wie man eine Zeichenkette in C++ umkehrt

Jinku Hu 12 Oktober 2023
  1. String-Konstruktor zum Umkehren einer Zeichenkette verwenden
  2. Verwendung von den std::reverse() Algorithmus zur Umkehrung einer Zeichenkette
  3. Verwendung von den std::copy() Algorithmus zur Umkehrung der Zeichenkette
Wie man eine Zeichenkette in C++ umkehrt

In diesem Artikel wird erklärt, wie eine Zeichenkette in C++ umgekehrt werden kann.

String-Konstruktor zum Umkehren einer Zeichenkette verwenden

std::basic_string hat den Konstruktor, der eine Zeichenkette mit dem Inhalt des Bereichs bilden kann. Wir können dann eine neue String-Variable deklarieren und ihren Konstruktor mit den umgekehrten Iteratoren der ursprünglichen String-Variablen - tmp_s - füttern. Das folgende Beispiel demonstriert diese Methode und gibt beide Zeichenketten zur Überprüfung aus.

#include <algorithm>
#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::reverse;
using std::string;

int main() {
  string tmp_s = "This string will be reversed";
  cout << tmp_s << endl;

  string tmp_s_reversed(tmp_s.rbegin(), tmp_s.rend());
  cout << tmp_s_reversed << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

This string will be reversed
desrever eb lliw gnirts sihT

Verwendung von den std::reverse() Algorithmus zur Umkehrung einer Zeichenkette

Die std::reverse Methode stammt aus der <algorithm> STL-Bibliothek und kehrt die Reihenfolge der Elemente im Bereich um. Die Methode arbeitet mit Objekten, die als Argumente übergeben wurden, und gibt keine neue Kopie der Daten zurück, so dass wir eine weitere Variable deklarieren müssen, um die ursprüngliche Zeichenkette zu erhalten.

Beachten Sie, dass die Funktion reverse die Ausnahme std::bad_alloc auslöst, wenn der Algorithmus keinen Speicher zuweisen kann.

#include <algorithm>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::reverse;
using std::string;

int main() {
  string tmp_s = "This string will be reversed";
  cout << tmp_s << endl;

  string tmp_s_reversed(tmp_s);
  reverse(tmp_s_reversed.begin(), tmp_s_reversed.end());
  cout << tmp_s_reversed << endl;

  return EXIT_SUCCESS;
}

Verwendung von den std::copy() Algorithmus zur Umkehrung der Zeichenkette

std::copy ist ein weiterer leistungsfähiger Algorithmus, der für mehrere Szenarien verwendet werden kann. Diese Lösung initialisiert eine neue String-Variable und modifiziert ihre Größe mit Hilfe der eingebauten resize-Methode. Als nächstes rufen wir die copy-Methode auf, um die deklarierte Zeichenkette mit den Daten der ursprünglichen Zeichenkette zu füllen. Beachten Sie jedoch, dass die ersten beiden Parameter umgekehrte Iteratoren des Quellbereichs sein sollten.

#include <algorithm>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::reverse;
using std::string;

int main() {
  string tmp_s = "This string will be reversed";
  cout << tmp_s << endl;

  string tmp_s_reversed;
  tmp_s_reversed.resize(tmp_s.size());
  copy(tmp_s.rbegin(), tmp_s.rend(), tmp_s_reversed.begin());
  cout << tmp_s_reversed << endl;

  return EXIT_SUCCESS;
}

Falls die umgekehrten Zeichenkettendaten nicht gespeichert werden müssen, können wir den copy()-Algorithmus verwenden, um die Zeichenkettendaten direkt in umgekehrter Reihenfolge auf die Konsole auszugeben, wie im folgenden Code-Beispiel gezeigt wird:

#include <algorithm>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::reverse;
using std::string;

int main() {
  string tmp_s = "This string will be reversed";
  cout << tmp_s << endl;

  copy(tmp_s.rbegin(), tmp_s.rend(), std::ostream_iterator<char>(cout, ""));

  return EXIT_SUCCESS;
}
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++ String