En este post vamos a ver cómo contar consonantes de una cadena en C, es decir, vamos a recorrer una cadena y contar cuántas consonantes tiene.

Recordemos que una consonante (sin ser un experto en el lenguaje español) es algo que está dentro del abecedario pero no es una vocal.

Función para obtener la cantidad de consonantes que tiene una cadena en ANSI C

Por lo tanto para poder contar consontantes de una cadena en C o mejor dicho, obtener la cantidad de consonantes que una cadena tiene hay que recorrer la cadena y comparar cada carácter, así como cuando contamos las vocales.

El algoritmo

Primero debemos recorrer la cadena y obtener cada carácter. A ese carácter le aplicamos dos filtros.

  1. El primer filtro es saber si el carácter es del alfabeto (no es un espacio, no un guión, no un número, etcétera), para ello usamos la función isalpha que viene dentro de ctype.h
  2. El segundo filtro es saber si el carácter NO es una vocal, para ello usamos una función definida por nosotros que indica si un carácter es vocal

Si ambos filtros se cumplen, podemos decir que el carácter es consonante.

A continuación tenemos la función que dice si un carácter es vocal, la misma nos ayuda para contar consonantes de una cadena en C:

// Función que indica si un carácter es vocal, ¿hace falta más explicación?
int esVocal(char letra) {
    // Convertir a mayúscula para evitar hacer más comparaciones
    char letraEnMayuscula = (char) toupper(letra);
    return letraEnMayuscula == 'A' ||
           letraEnMayuscula == 'E' ||
           letraEnMayuscula == 'I' ||
           letraEnMayuscula == 'O' ||
           letraEnMayuscula == 'U';
}

La convertimos a mayúscula usando toupper para que las comparaciones sean menos.

Cantidad de consonantes en una cadena de C

Ahora que ya tenemos la función ayudante, podemos implementar la función llamada contarConsonantes que recibe una cadena (bueno, un apuntador al primer elemento de un arreglo de tipo char, pero queremos usar términos simples) y devuelve un entero con la cantidad de consonantes.

int contarConsonantes(char cadena[]) {
    int consonantes = 0;// Almacenar la cantidad de consonantes
    int i = 0;// El índice para recorrer la cadena
    while (cadena[i]) {
        // Si es del alfabeto pero no es vocal
        if (isalpha(cadena[i]) && !esVocal(cadena[i])) {
            consonantes++;
        }
        i++;
    }
    return consonantes;
}

Tenemos la variable i que nos ayuda a recorrer la cadena, en cada paso comprobamos si es del abecedario y si no es vocal, en caso de que se cumplan, simplemente aumentamos la cantidad de consonantes.

Al terminar de recorrer la cadena devolvemos el número de consonantes.

Poniendo todo junto

Ahora veamos un ejemplo de uso de la función para poder contar consonantes de una cadena en ANSI C. Queda así:

/**
 * Contar consonantes de una cadena en C usando simples comparaciones
 * y la función isalpha
 *
 * @author parzibyte
 * https://parzibyte.me/blog
 *
 * */#include <stdio.h> // Para printf
#include <ctype.h> // Para toupper y isalpha


// Función que indica si un carácter es vocal, ¿hace falta más explicación?
int esVocal(char letra) {
    // Convertir a mayúscula para evitar hacer más comparaciones
    char letraEnMayuscula = (char) toupper(letra);
    return letraEnMayuscula == 'A' ||
           letraEnMayuscula == 'E' ||
           letraEnMayuscula == 'I' ||
           letraEnMayuscula == 'O' ||
           letraEnMayuscula == 'U';
}

int contarConsonantes(char cadena[]) {
    int consonantes = 0;// Almacenar la cantidad de consonantes
    int i = 0;// El índice para recorrer la cadena
    while (cadena[i]) {
        // Si es del alfabeto pero no es vocal
        if (isalpha(cadena[i]) && !esVocal(cadena[i])) {
            consonantes++;
        }
        i++;
    }
    return consonantes;
}

int main() {
    char cadena[] = "Hola mundo (hoy es 21 de octubre), vamos a contar las consonantes en C desde parzibyte.me";
    int consonantes = contarConsonantes(cadena);
    printf("La cadena '%s' \ntiene %d consonantes", cadena, consonantes);
    return 0;
}

En el método main estamos invocando a la función contarConsonantes y después con printf imprimimos los resultados.

Recuerda que la cadena podría ser proporcionada por el usuario usando por ejemplo fgets.

Por cierto, aquí puedes ver cómo contar las vocales y aquí más sobre ANSI C.

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.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

3 días hace

Esta web usa cookies.