Principiante · Cadenas
Invertir una cadena
Lee una palabra e imprímela al revés. Tu primer contacto con arrays de caracteres: el string estilo C es un array de char con terminador oculto.
En una fraseLee la palabra en un array de char, obtén la longitud con strlen e imprime los caracteres del último al primero: una cadena C es un array de char que termina en un '\0' oculto.
El problema
Entrada: Una palabra (sin espacios), hasta 99 caracteres.
Salida: Los mismos caracteres, invertidos.
Ejemplo:
| Entrada | Salida |
|---|---|
hello | olleh |
Tu solución
Entrada personalizada para «Ejecutar mi entrada»
La corrección corre en tu navegador contra pruebas ocultas. Un bucle infinito se corta a los 3 segundos — aun así, asegúrate de que todo bucle tenga salida. Tu código se guarda solo mientras escribes.
¿Atascado? Pistas
Pista 1 — array de char + strlen
char s[100]; cin >> s; lee una palabra. strlen(s) da la longitud; recorre de n-1 a 0.
Pista 2 — ¿Por qué parar en el terminador?
Un string estilo C termina en byte cero: así saben las funciones dónde acaba.
Solución (¡inténtalo primero!)
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[100];
cin >> s;
int n = strlen(s);
for (int i = n - 1; i >= 0; i--) cout << s[i];
cout << endl;
return 0;
}
Es el primo con arrays de Invertir un número.
Análisis profundo
Por qué funciona
Una cadena estilo C es un array más un terminador. Invertirla en el sitio con dos índices —uno por cada extremo— es el patrón detrás de toda transformación in situ.
El coste
En el sitio: O(n) de tiempo y O(1) de espacio extra; copiando a otro array: O(n) extra.
Dónde falla
- Llamar a strlen en la condición del bucle convierte todo en O(n²). Guarda la longitud una vez.
- Olvidar el terminador, o sobrescribirlo, deja basura más allá del final de la cadena.
Siguiente paso
Las mismas habilidades de array sobre caracteres: Contar vocales.
Dos cosas para recordar
- Dos índices que se acercan: el patrón de inversión in situ.
- strlen en la condición del bucle es un O(n²) escondido.
🐞 Esta versión falla: ábrela y pruébala
Imprime hacia delante: no invierte nada
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[100];
cin >> s;
int n = strlen(s);
for (int i = 0; i < n; i++) cout << s[i];
cout << endl;
return 0;
}