Devolver uma 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++ -
Utilize o
std::string &func()
Notação para Retornar String da Função -
Utilize o
char *func()
Notação para Retornar String da Função
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
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