HOWTO · C++

Comment inverser une chaîne de caractères en C++

Cet article présente comment inverser une chaîne de caractères en C++

Sur cette page

Cet article explique comment inverser une chaîne de caractères en C++.

Utiliser le String Constructor pour inverser une chaîne de caractères

std::basic_string a le constructeur, qui peut construire une chaîne avec le contenu de la plage. Nous pouvons alors déclarer une nouvelle variable de chaîne et alimenter son constructeur avec les itérateurs inverses de la variable de chaîne originale - tmp_s. L’exemple suivant démontre cette méthode et produit les deux chaînes de caractères pour vérification.

#include <algorithm>
#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::reverse;
using std::string;

int main() {
  string tmp_s = "This string will be reversed";
  cout << tmp_s << endl;

  string tmp_s_reversed(tmp_s.rbegin(), tmp_s.rend());
  cout << tmp_s_reversed << endl;

  return EXIT_SUCCESS;
}

Production:

This string will be reversed
desrever eb lliw gnirts sihT

Utilisez std::reverse() Algorithme pour inverser une chaîne

La méthode std::reverse est issue de la bibliothèque <algorithm> STL, et elle inverse l’ordre des éléments de la gamme. La méthode opère sur les objets passés en argument et ne retourne pas de nouvelle copie des données, nous devons donc déclarer une autre variable pour préserver la chaîne originale.

Notez que la fonction reverse lance l’exception std::bad_alloc si l’algorithme ne parvient pas à allouer de la mémoire.

#include <algorithm>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::reverse;
using std::string;

int main() {
  string tmp_s = "This string will be reversed";
  cout << tmp_s << endl;

  string tmp_s_reversed(tmp_s);
  reverse(tmp_s_reversed.begin(), tmp_s_reversed.end());
  cout << tmp_s_reversed << endl;

  return EXIT_SUCCESS;
}

Utilisez std::copy() Algorithme pour inverser une chaîne de caractères

Le std::copy est un autre algorithme puissant, qui peut être utilisé pour de multiples scénarios. Cette solution initialise une nouvelle variable de chaîne et modifie sa taille en utilisant la méthode intégrée de resize. Ensuite, nous appelons la méthode copy pour remplir la chaîne déclarée avec les données de la chaîne originale. Notez, cependant, que les deux premiers paramètres doivent être des itérateurs inverses de la plage source.

#include <algorithm>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::reverse;
using std::string;

int main() {
  string tmp_s = "This string will be reversed";
  cout << tmp_s << endl;

  string tmp_s_reversed;
  tmp_s_reversed.resize(tmp_s.size());
  copy(tmp_s.rbegin(), tmp_s.rend(), tmp_s_reversed.begin());
  cout << tmp_s_reversed << endl;

  return EXIT_SUCCESS;
}

Dans le cas où les données de la chaîne inversée n’ont pas besoin d’être stockées, nous pouvons utiliser l’algorithme copy() pour sortir directement les données de la chaîne dans l’ordre inverse vers la console comme le montre l’exemple de code suivant:

#include <algorithm>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::reverse;
using std::string;

int main() {
  string tmp_s = "This string will be reversed";
  cout << tmp_s << endl;

  copy(tmp_s.rbegin(), tmp_s.rend(), std::ostream_iterator<char>(cout, ""));

  return EXIT_SUCCESS;
}