Ejercicios de C/C++ para principiantes

Contar las vocales de una cadena en C y C++

En esta lección vas a contar las vocales de una línea de texto sin tener en cuenta la diferencia entre mayúsculas y minúsculas.

Introducción

Contar las vocales reúne tres habilidades: recorrer cada carácter de la cadena, pasar los caracteres a minúsculas y comprobar si un carácter pertenece a un conjunto. Las vocales en inglés son a, e, i, o y u.

Puntos importantes

  • Activa los avisos del compilador (compiler warnings) y corrígelos todos.
  • Entiende bien el tipo y la vida útil (lifetime) de cada valor.
  • Comprueba siempre los datos de entrada y los límites de los índices de los arreglos.

Ejemplos de código C y C++

C
Ejecutar →
main.c
#include <ctype.h>
#include <stdio.h>
#include <string.h>
int main(void) {
    const char *text = "Code Utility"; int count = 0;
    // strchr performs a compact membership check.
    for (; *text; ++text) if (strchr("aeiou", tolower((unsigned char)*text))) ++count;
    printf("vowels=%d\n", count);
}
Resultado de la ejecución
vowels=5
C++
Ejecutar →
main.cpp
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
int main() {
    std::string text = "Code Utility";
    // count_if counts characters accepted by the predicate.
    auto vowels = std::count_if(text.begin(), text.end(), [](unsigned char c) {
        return std::string("aeiou").find(std::tolower(c)) != std::string::npos;
    });
    std::cout << "vowels=" << vowels << '\n';
}
Resultado de la ejecución
vowels=5

Comparación entre C y C++

La función tolower pasa cada carácter a minúscula para que mayúsculas y minúsculas se traten igual. El carácter se convierte en unsigned char antes de pasarlo a tolower, para evitar problemas con los caracteres especiales. La función strchr("aeiou", ...) devuelve un puntero no NULL si el carácter está en la cadena de vocales, y entonces el contador aumenta. La cadena "Code Utility" tiene 5 vocales.

C

C usa funciones procedurales pequeñas y muestra abiertamente cómo se representan los datos en memoria.

C++

C++ sigue permitiendo trabajar a bajo nivel, pero añade tipos de biblioteca y abstracciones más seguras.

Ejercicios de práctica

Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.

  • Prueba entradas no válidas y valores límite.
  • Compila con las opciones -Wall -Wextra -Wpedantic para activar más avisos.
  • Pon las declaraciones comunes en un archivo de cabecera y la implementación en un archivo aparte.

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos