Ejercicio 07 — Calcular la longitud de una cadena SIN usar strlen, recorriendo hasta…

Dificultad: rojo · Módulo 05 (Arrays y cadenas)

Enunciado

Calcular la longitud de una cadena SIN usar strlen, recorriendo hasta encontrar el caracter ‘\0’.

Diagrama de flujo

Diagrama de flujo del ejercicio 07

Cómo se resuelve

La función strlen de <string.h> mide la longitud de una cadena, pero aquí la calculamos a mano para entender qué hace por dentro: una cadena en C es un array de char que termina en '\0', y su longitud es simplemente cuántos caracteres hay antes de ese terminador.

  1. Leemos con fgets, que además del texto guarda el salto de línea '\n' que pulsas con Enter. Por eso primero lo limpiamos: recorremos la cadena y, al encontrar '\n', lo sustituimos por '\0' y salimos. Así el \n deja de contar como carácter útil.
  2. El núcleo del ejercicio es este bucle:
int longitud = 0;
while (s[longitud] != '\0') {
    longitud++;
}

Avanzamos un índice mientras no lleguemos al terminador. Cuando s[longitud] es '\0', paramos, y en ese momento longitud vale exactamente el número de caracteres reales. Eso es todo lo que hace strlen.

  1. Al final imprimimos ambos valores (el manual y el de strlen, con %zu) para comprobar que coinciden.

Trampa habitual: si la cadena no tuviera '\0' (por ejemplo si rellenas un char[] a mano y olvidas ponerlo), el while no sabría dónde parar y seguiría leyendo memoria ajena hasta encontrar por casualidad un byte cero. El terminador nulo es lo que hace que una cadena en C tenga final.

Para practicar — cópialo en Dev-C++

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

/*
 * Curso de C — Modulo 05: Arrays y cadenas
 * Ejercicio 07 — PRACTICA (rellena los TODO)
 * Enunciado: Calcular la longitud de una cadena SIN usar strlen,
 *            recorriendo hasta encontrar el caracter '\0'.
 * Dificultad: rojo
 * Compilar: gcc -std=c11 -Wall ej07_practica.c -o ej07 && ./ej07
 */
 
#include <stdio.h>
#include <string.h>   // solo para la verificacion final con strlen
 
int main(void) {
    char s[200];
 
    // TODO 1: Lee una cadena con fgets.
 
    // TODO 2 (opcional pero recomendado): Elimina el '\n' que fgets
    //         incluye al final. Recorre la cadena y si encuentras '\n',
    //         sustituye por '\0' y sal del bucle.
 
    // TODO 3: Declara 'longitud = 0'. Usa un bucle while cuya condicion
    //         sea s[longitud] != '\0'. Dentro, incrementa longitud.
    //         Al salir, longitud tiene el numero de chars utiles.
 
    // TODO 4: Imprime la longitud calculada.
 
    // TODO 5: Verifica con strlen(s) que el resultado coincide.
    //         printf("strlen dice: %zu\n", strlen(s));
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 05: Arrays y cadenas
 * Ejercicio 07 — MODELO (resuelto)
 * Enunciado: Calcular la longitud de una cadena SIN usar strlen,
 *            recorriendo hasta encontrar el caracter '\0'.
 * Dificultad: rojo
 * Compilar: gcc -std=c11 -Wall ej07_modelo.c -o ej07 && ./ej07
 */
 
#include <stdio.h>
#include <string.h>   // solo para verificar con strlen al final
 
int main(void) {
    char s[200];
 
    printf("Introduce una cadena: ");
    fgets(s, sizeof(s), stdin);
 
    // Eliminar el '\n' que fgets incluye al final (si cabe en el buffer)
    // Recorremos hasta '\n' o '\0' y sustituimos '\n' por '\0'
    for (int i = 0; s[i] != '\0'; i++) {
        if (s[i] == '\n') {
            s[i] = '\0';
            break;
        }
    }
 
    // Contar longitud manualmente: avanzar un indice hasta encontrar '\0'
    int longitud = 0;
    while (s[longitud] != '\0') {
        longitud++;
    }
    // Al salir del while, s[longitud] == '\0', asi que longitud
    // contiene exactamente el numero de caracteres utiles.
 
    printf("Longitud (manual): %d\n", longitud);
 
    // Verificacion con strlen (debe coincidir)
    printf("Longitud (strlen): %zu\n", strlen(s));
 
    return 0;
}

Cómo usarlo

Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.

Conexiones