Devolver uma string a partir de uma função em C++

Jinku Hu 12 outubro 2023
  1. Utilize o std::string func() Notação para retornar uma string de função em C++
  2. Utilize o std::string &func() Notação para Retornar String da Função
  3. Utilize o char *func() Notação para Retornar String da Função
Devolver uma string a partir de uma função em C++

Este artigo explica vários métodos sobre como se pode devolver um string a partir de uma função em C++.

Utilize o std::string func() Notação para retornar uma string de função em C++

O retorno pelo valor é o método preferido para devolver objectos de strings a partir de funções. Uma vez que a classe std::string tem o construtor move, retornar mesmo as strings longas por valor é eficiente. Se um objecto tem um construtor move, diz-se que é caracterizado com movimentos-semânticos. A expressão mover-semântica implica que o objecto não é copiado para um local diferente no retorno da função, proporcionando assim um tempo de execução mais rápido da função.

#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

Utilize o std::string &func() Notação para Retornar String da Função

Este método utiliza a notação de retorno por referência, que pode ser uma abordagem alternativa a este problema. Embora o retorno por referência seja a forma mais eficiente de devolver grandes estruturas ou classes, neste caso não imporia despesas adicionais em comparação com o método anterior. Note que não se deve substituir uma variável local declarada na função por uma referência; isto leva a uma referência pendente.

#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

Utilize o char *func() Notação para Retornar String da Função

Em alternativa, podemos utilizar char * para devolver um objecto de string de uma função. Lembre-se de que a classe std::string armazena caracteres como um array contínua. Assim, podemos devolver um ponteiro ao primeiro elemento char desse array chamando o método embutido data(). Contudo, certifique-se de que não utiliza um método semelhante c_str() ao retornar um array de caracteres com termo nulo do objecto std::string, pois este substitui o ponteiro const ao primeiro 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

Artigo relacionado - C++ String