Principiante · cctype
Contar vocales
Lee una palabra y cuenta sus vocales. El juez incluye mayúsculas a propósito.
En una fraseRecorre la cadena y compara cada carácter con a, e, i, o, u en mayúscula y minúscula: las pruebas ocultas incluyen entrada toda en mayúsculas, así que comparar solo minúsculas descuenta.
El problema
Entrada: Una palabra (solo letras, puede ir en mayúsculas).
Salida: Cuántas vocales contiene, sin distinguir mayúsculas.
Ejemplo:
| Entrada | Salida |
|---|---|
AEIOU | 5 |
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 — tolower es tu aliado
De <cctype>: char c = tolower(s[i]); y compara con las cinco minúsculas.
Pista 2 — Condición del bucle
for (int i = 0; s[i] != '\0'; i++) — para en el terminador.
Solución (¡inténtalo primero!)
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int main() {
char s[100];
cin >> s;
int count = 0;
for (int i = 0; s[i] != '\0'; i++) {
char lower = tolower(s[i]);
if (lower == 'a' || lower == 'e' || lower == 'i' ||
lower == 'o' || lower == 'u') count++;
}
cout << count << endl;
return 0;
}
Sin tolower, la prueba AEIOU da 0. Siguiente: arrays 2D.
Análisis profundo
Por qué funciona
Clasificar por pertenencia —¿está este carácter en un conjunto?— es el caso base de todo analizador léxico y sintáctico que te encuentres.
El coste
O(n·k) con k = 5 comparaciones, es decir O(n). Una tabla de 256 entradas convierte k en constante.
Dónde falla
- Contar solo minúsculas se salta la 'A'. Normaliza con tolower o prueba ambos casos.
- tolower depende del locale: en turco la 'I' no pasa a 'i'.
Siguiente paso
Arrays de caracteres a escala: Invertir una cadena.
Dos cosas para recordar
- Normaliza el caso antes de comparar caracteres.
- Las pruebas de pertenencia piden una tabla, no una cadena de if.
🐞 Esta versión falla: ábrela y pruébala
Solo cuenta vocales minúsculas
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[100];
cin >> s;
int n = strlen(s), c = 0;
for (int i = 0; i < n; i++) {
if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u') c++;
}
cout << c << endl;
return 0;
}