Cómo invertir una cadena en C++

Jinku Hu 12 octubre 2023
  1. Usar el Constructor de Cadenas para invertir una cadena
  2. Use el algoritmo std::reverse() para invertir una cadena
  3. Usa std::copy() Algoritmo para revertir la cadena
Cómo invertir una cadena en C++

Este artículo explicará cómo invertir una cadena en C++.

Usar el Constructor de Cadenas para invertir una cadena

std::basic_string tiene el constructor, que puede construir una cadena con el contenido del rango. Podemos entonces declarar una nueva variable de cadena y alimentar a su constructor con los iteradores inversos de la variable de cadena original - tmp_s. El siguiente ejemplo demuestra este método y da salida a ambas cadenas para su verificación.

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

Resultado:

This string will be reversed
desrever eb lliw gnirts sihT

Use el algoritmo std::reverse() para invertir una cadena

El método std::reverse es de la biblioteca STL <algorithm>, e invierte el orden de los elementos en el rango. El método opera sobre los objetos pasados como argumentos y no devuelve una nueva copia de los datos, por lo que necesitamos declarar otra variable para preservar la cadena original.

Nótese que la función reverse lanza la excepción std::bad_alloc si el algoritmo falla en la asignación de memoria.

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

Usa std::copy() Algoritmo para revertir la cadena

std::copy es otro poderoso algoritmo, que puede ser utilizado para múltiples escenarios. Esta solución inicializa una nueva variable de cadena y modifica su tamaño usando el método incorporado de size. A continuación, llamamos al método copy para llenar la cadena declarada con los datos de la cadena original. Nótese, sin embargo, que los dos primeros parámetros deben ser iteradores inversos del rango de la fuente.

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

En caso de que los datos de la cadena invertida no necesiten ser almacenados, podemos usar el algoritmo copy() para emitir directamente los datos de la cadena en orden inverso a la consola como se muestra en el siguiente ejemplo de código:

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