Restituisce una stringa da una funzione in C++

Jinku Hu 12 ottobre 2023
  1. Usa la notazione std::string func() per restituire una stringa dalla funzione in C++
  2. Usa la notazione std::string &func() per restituire una stringa dalla funzione
  3. Usa la notazione char *func() per restituire la stringa dalla funzione
Restituisce una stringa da una funzione in C++

Questo articolo spiega diversi metodi su come restituire una stringa da una funzione in C++.

Usa la notazione std::string func() per restituire una stringa dalla funzione in C++

Restituire per valore è il metodo preferito per restituire oggetti stringa dalle funzioni. Poiché la classe std::string ha il costruttore move, restituire anche le stringhe lunghe per valore è efficiente. Se un oggetto ha un costruttore move, si dice che sia caratterizzato con la semantica del movimento. La semantica di spostamento implica che l’oggetto non viene copiato in una posizione diversa al ritorno della funzione, fornendo così un tempo di esecuzione della funzione più veloce.

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

Produzione:

This string shall be reversed
desrever eb llahs gnirts sihT

Usa la notazione std::string &func() per restituire una stringa dalla funzione

Questo metodo utilizza la notazione di ritorno per riferimento, che può essere un approccio alternativo a questo problema. Anche se la restituzione per riferimento è il modo più efficiente per restituire grandi strutture o classi, in questo caso non imporrebbe un sovraccarico aggiuntivo rispetto al metodo precedente. Tieni presente che non dovresti sostituire una variabile locale dichiarata nella funzione con un riferimento; questo porta a un riferimento penzolante.

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

Produzione:

Let this string be reversed
desrever eb gnirts siht teL

Usa la notazione char *func() per restituire la stringa dalla funzione

In alternativa, possiamo usare char * per restituire un oggetto stringa da una funzione. Ricorda che la classe std::string memorizza i caratteri come un array continuo. Quindi, possiamo restituire un puntatore al primo elemento char di quell’array chiamando il metodo data() integrato. Tuttavia, assicurati di non usare un metodo simile c_str() quando restituisci un array di caratteri con terminazione null dell’oggetto std::string, poiché sostituisce il puntatore const al primo 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;
}

Produzione:

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

Articolo correlato - C++ String