Comment retourner une chaîne de caractères à partir d'une fonction en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la notation std::string func() pour retourner une chaîne de caractères à partir d’une fonction en C++
  2. Utilisez la notation std::string &func() pour retourner la chaîne de la fonction
  3. Utilisez la notation char *func() pour retourner la chaîne de caractères de la fonction
Comment retourner une chaîne de caractères à partir d'une fonction en C++

Cet article explique plusieurs méthodes permettant de retourner une chaîne de caractères à partir d’une fonction en C++.

Utilisez la notation std::string func() pour retourner une chaîne de caractères à partir d’une fonction en C++

Le retour par la valeur est la méthode préférée pour retourner des objets de type chaîne de caractères à partir de fonctions. Puisque la classe std::string a le constructeur move, retourner même les longues chaînes de caractères par valeur est efficace. Si un objet a un constructeur move, on dit qu’il est caractérisé par une sémantique de déplacement. La sémantique des mouvements implique que l’objet n’est pas copié à un emplacement différent lors du retour de la fonction, ce qui permet d’accélérer le temps d’exécution de la fonction.

#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;
}

Production:

This string shall be reversed
desrever eb llahs gnirts sihT

Utilisez la notation std::string &func() pour retourner la chaîne de la fonction

Cette méthode utilise le retour par notation de référence, qui peut être une approche alternative à ce problème. Même si le retour par référence est le moyen le plus efficace de renvoyer de grandes structures ou classes, il n’imposerait pas de frais généraux supplémentaires par rapport à la méthode précédente dans ce cas. Notez que vous ne devez pas remplacer une variable locale déclarée dans la fonction par une référence ; cela conduit à une référence pendante.

#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;
}

Production:

Let this string be reversed
desrever eb gnirts siht teL

Utilisez la notation char *func() pour retourner la chaîne de caractères de la fonction

On peut aussi utiliser char * pour retourner une chaîne de caractères à partir d’une fonction. Rappelez-vous que la classe std::string stocke les caractères sous forme de tableau continu. Ainsi, nous pouvons renvoyer un pointeur vers le premier élément char de ce tableau en appelant la méthode intégrée data(). Cependant, assurez-vous que vous n’utilisez pas une méthode similaire c_str() pour retourner un tableau de caractères à terminaison nulle de l’objet std::string, car elle remplace le pointeur const vers le premier élément char.

#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;
}

Production:

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

Article connexe - C++ String