So geben Sie eine Zeichenkette aus einer Funktion in C++ zurück

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Notation std::string func(), um eine Zeichenkette von einer Funktion in C++ zurückzugeben
  2. Verwenden Sie die Notation std::string &func(), um einen String von der Funktion zurückzugeben
  3. Verwenden Sie die char *func() Notation, um Zeichenkette von der Funktion zurückzugeben
So geben Sie eine Zeichenkette aus einer Funktion in C++ zurück

In diesem Artikel werden mehrere Methoden erläutert, wie Sie eine Zeichenkette aus einer Funktion in C++ zurückgeben können.

Verwenden Sie die Notation std::string func(), um eine Zeichenkette von einer Funktion in C++ zurückzugeben

Die Rückgabe nach dem Wert ist die bevorzugte Methode zur Rückgabe von String-Objekten aus Funktionen. Da die Klasse std::string über den Konstruktor move verfügt, ist es effizient, auch lange Zeichenketten als Wert zurückzugeben. Wenn ein Objekt einen move-Konstruktor hat, wird es mit der move-Semantik charakterisiert. Die Bewegungs-Semantik impliziert, dass das Objekt bei der Funktionsrückgabe nicht an eine andere Stelle kopiert wird, wodurch eine schnellere Funktionsausführungszeit erreicht wird.

#include <algorithm>
#include <iostream>
#include <iterator>

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

string ReverseString(string &s) {
  string rev(s.rbegin(), s.rend());
  return rev;
}

int main() {
  string str = "This string shall be reversed";

  cout << str << endl;
  cout << ReverseString(str) << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

This string shall be reversed
desrever eb llahs gnirts sihT

Verwenden Sie die Notation std::string &func(), um einen String von der Funktion zurückzugeben

Bei dieser Methode wird die Rückgabe durch Referenznotation verwendet, was ein alternativer Ansatz für dieses Problem sein kann. Auch wenn die Rückgabe per Referenz die effizienteste Methode zur Rückgabe großer Strukturen oder Klassen ist, würde sie in diesem Fall im Vergleich zur vorherigen Methode keinen zusätzlichen Aufwand verursachen. Beachten Sie, dass Sie eine in der Funktion deklarierte lokale Variable nicht durch eine Referenz ersetzen sollten; dies führt zu einer baumelnden Referenz.

#include <algorithm>
#include <iostream>
#include <iterator>

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

string &ReverseString(string &s) {
  reverse(s.begin(), s.end());
  return s;
}

int main() {
  string str = "Let this string be reversed";

  cout << str << endl;
  cout << ReverseString(str) << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Let this string be reversed
desrever eb gnirts siht teL

Verwenden Sie die char *func() Notation, um Zeichenkette von der Funktion zurückzugeben

Alternativ können wir char * verwenden, um ein String-Objekt von einer Funktion zurückzugeben. Denken Sie daran, dass die Klasse std::string Zeichen als ein kontinuierliches Array speichert. Daher können wir einen Zeiger auf das erste Element char dieses Arrays zurückgeben, indem wir die eingebaute Methode data() aufrufen. Stellen Sie jedoch sicher, dass Sie keine ähnliche c_str() Methode verwenden, wenn Sie ein null-terminiertes Zeichenarray eines std::string Objekts zurückgeben, da es den const Zeiger auf das erste char Element ersetzt.

#include <algorithm>
#include <iostream>
#include <iterator>

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

char *ReverseString(string &s) {
  reverse(s.begin(), s.end());
  return s.data();
}

int main() {
  string str = "This string must be reversed";

  cout << str << endl;
  cout << ReverseString(str) << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

This string must be reversed
desrever eb tsum gnirts sihT
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