C - Saber si Cadena contiene únicamente letras del alfabeto

C – Saber si cadena solo tiene letras de alfabeto

En este ejercicio sobre programación en C vamos a ver cómo saber si una cadena está conformada únicamente por las letras del alfabeto, es decir:

  1. Que tiene únicamente letras del alfabeto, ya sean mayúsculas o minúsculas
  2. No tiene números
  3. No tiene otro tipo de caracteres, solo espacios (esto último igual se puede quitar)

C - Saber si Cadena contiene únicamente letras del alfabeto

Para ello nos vamos a valer únicamente de la función isalpha y comprobaciones simples.

Función en C: Saber si cadena solo tiene letras de alfabeto

Vamos a encerrar todo esto en una función que devuelve un booleano emulado, es decir, un entero en donde el 1 es true y el 0 false.

En la función recorremos la cadena y obtenemos el carácter en cada paso. También hacemos dos comprobaciones:

  1. Si el carácter NO está dentro del alfabeto (con isalpha) o…
  2. Si el carácter no es un espacio

En caso de que ambas condiciones se cumplan, inmediatamente detenemos la función y regresamos false.

Por si terminamos el ciclo y no se terminó la función, entonces significa que hemos recorrido toda la cadena y cada carácter pasó la validación así que regresamos true.

Así que el código fuente queda así:

int tieneUnicamenteLetrasDelAlfabeto(char cadena[]) {
    int i = 0;
    while (cadena[i]) {
        // Si no es del alfabeto y no es un espacio regresamos false o 0
        if (
                !isalpha(cadena[i])
                && cadena[i] != ' '// El espacio cuenta como válido, si no, simplemente quita la condición
                )
            return 0;
        i++;
    }
    // Si terminamos de recorrer la cadena y no encontramos errores, regresamos 1 o true
    return 1;
}

Modo de uso

Veamos el uso de la función para saber si cadena contiene únicamente letras del alfabeto en ANSI C.

En el método main definimos una cadena y luego invocamos a la función definida anteriormente:

int main() {
    // Esta tiene únicamente letras del alfabeto
    char cadena1[] = "Me gusta programar en C";
    if (tieneUnicamenteLetrasDelAlfabeto(cadena1)) {
        printf("'%s' tiene únicamente del alfabeto\n", cadena1);
    } else {
        printf("'%s' NO tiene únicamente letras del alfabeto\n", cadena1);
    }
    // Esta no, porque tiene números
    char cadena2[] = "No me gusta programar en Python 2";
    if (tieneUnicamenteLetrasDelAlfabeto(cadena2)) {
        printf("'%s' tiene únicamente del alfabeto\n", cadena2);
    } else {
        printf("'%s' NO tiene únicamente letras del alfabeto\n", cadena2);
    }
    // Esta no, porque tiene un .
    char cadena3[] = "parzibyte.me";
    // Recuerda que puedes almacenar el resultado
    int resultado = tieneUnicamenteLetrasDelAlfabeto(cadena3);
    if (resultado) {
        printf("'%s' tiene únicamente letras del alfabeto\n", cadena3);
    } else {
        printf("'%s' NO tiene únicamente letras del alfabeto\n", cadena3);
    }
    return 0;
}

En este caso simplemente imprimo una cadena, pero puedes usar esto para cualquier otra cosa obteniendo el resultado.

Como ves, si tiene números o puntos, la validación indica que no está compuesta únicamente por letras del alfabeto.

Poniendo todo junto

El código completo de para Saber si cadena solo tiene letras de alfabeto en C queda así:

/**
 * Saber si cadena tiene únicamente letras del alfabeto con C
 *
 * @author parzibyte
 * https://parzibyte.me/blog
 *
 * */
#include <stdio.h> // Para printf
#include <ctype.h> // Para isalpha

int tieneUnicamenteLetrasDelAlfabeto(char cadena[]) {
    int i = 0;
    while (cadena[i]) {
        // Si no es del alfabeto y no es un espacio regresamos false o 0
        if (
                !isalpha(cadena[i])
                && cadena[i] != ' '// El espacio cuenta como válido, si no, simplemente quita la condición
                )
            return 0;
        i++;
    }
    // Si terminamos de recorrer la cadena y no encontramos errores, regresamos 1 o true
    return 1;
}

int main() {
    // Esta tiene únicamente letras del alfabeto
    char cadena1[] = "Me gusta programar en C";
    if (tieneUnicamenteLetrasDelAlfabeto(cadena1)) {
        printf("'%s' tiene únicamente del alfabeto\n", cadena1);
    } else {
        printf("'%s' NO tiene únicamente letras del alfabeto\n", cadena1);
    }
    // Esta no, porque tiene números
    char cadena2[] = "No me gusta programar en Python 2";
    if (tieneUnicamenteLetrasDelAlfabeto(cadena2)) {
        printf("'%s' tiene únicamente del alfabeto\n", cadena2);
    } else {
        printf("'%s' NO tiene únicamente letras del alfabeto\n", cadena2);
    }
    // Esta no, porque tiene un .
    char cadena3[] = "parzibyte.me";
    // Recuerda que puedes almacenar el resultado
    int resultado = tieneUnicamenteLetrasDelAlfabeto(cadena3);
    if (resultado) {
        printf("'%s' tiene únicamente letras del alfabeto\n", cadena3);
    } else {
        printf("'%s' NO tiene únicamente letras del alfabeto\n", cadena3);
    }
    return 0;
}

Por cierto, en el código he definido la cadena pero bien podría proporcionarla el usuario, la puedes leer con fgets.

¿Más tutoriales de C? click aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *