Cómo devolver una cadena de una función en C++

Jinku Hu 12 octubre 2023
  1. Usa la notación std::string func() para devolver una cadena desde una función en C++
  2. Usa la notación std::string &func() para devolver la cadena de la función
  3. Use la notación char *func() para devolver la cadena de la función
Cómo devolver una cadena de una función en C++

Este artículo explica varios métodos sobre cómo se puede devolver una cadena de una función en C++.

Usa la notación std::string func() para devolver una cadena desde una función en C++

El retorno por el valor es el método preferido para devolver los objetos de cadena de las funciones. Como la clase std::string tiene el constructor move, devolver incluso las cadenas largas por el valor es eficiente. Si un objeto tiene un constructor de move, se dice que está caracterizado por la semántica del movimiento. La semántica de movimiento implica que el objeto no se copia a un lugar diferente en el retorno de la función, por lo que proporciona un tiempo de ejecución de la función más rápido.

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

Resultado:

This string shall be reversed
desrever eb llahs gnirts sihT

Usa la notación std::string &func() para devolver la cadena de la función

Este método utiliza la notación de retorno por referencia, que puede ser un enfoque alternativo a este problema. Aunque el retorno por referencia es la forma más eficiente de devolver grandes estructuras o clases, no impondría gastos generales adicionales en comparación con el método anterior en este caso. Tenga en cuenta que no debe sustituir una variable local declarada en la función por una referencia; esto conduce a una referencia colgante.

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

Resultado:

Let this string be reversed
desrever eb gnirts siht teL

Use la notación char *func() para devolver la cadena de la función

Alternativamente, podemos usar char para devolver un objeto de cadena de una función. Recadena que la clase std::string almacena los caracteres como un array continuo. Por lo tanto, podemos devolver un puntero al primer elemento char de ese array llamando al método incorporado data(). Sin embargo, asegúrate de no usar un método similar a c_str() cuando devuelvas el array de caracteres terminados en cero del objeto std::string, ya que reemplaza el puntero const al primer elemento 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;
}

Resultado:

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

Artículo relacionado - C++ String