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:

EntradaSalida
helloolleh

Tu solución

main.cpp — 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;
}