AprenderC
← Todas las lecciones

Contar palabras

Recorrer no basta: hay que ir recordando dónde estabas.

1Por qué

Contar letras fue fácil: se avanza hasta el cero del final y se suma uno cada vez. Contar palabras no sale así, y por una razón que vale más que el ejercicio.

Una palabra no es un carácter: es un tramo. Mirando una letra suelta no puedes decir si empieza una palabra o si estás en medio de una — depende de lo que había antes. Y el texto no guarda esa información en ninguna parte.

La solución es llevarla tú, en una cajita aparte: «¿venía dentro de una palabra o no?». Eso se llama estado, y es una de las ideas que más lejos llegan. Un programa que analiza texto, uno que lee un archivo con formato, uno que entiende lo que escribes: todos avanzan de a un carácter recordando dónde estaban.

Con el estado puesto, la regla es corta. Si el carácter es un espacio, ya no estás dentro. Si no lo es y no estabas dentro, acaba de empezar una palabra: cuenta uno y anota que ahora sí estás. Y si no lo es y ya estabas, no pasa nada — es una letra más de la misma palabra.

Esa última rama es la que hace que «hola que tal» dé 3 y no 11.

2Míralo andar

Este programa funciona. Léelo, y después ejecútalo sin cambiar nada.

#include <stdio.h>
int main(void)
{
char t[30] = "hola que tal";
int palabras = 0;
int dentro = 0;
for (int i = 0; t[i] != 0; i++)
{
if (t[i] == ' ')
dentro = 0;
else if (dentro == 0)
{
dentro = 1;
palabras = palabras + 1;
}
}
printf("%d\n", palabras);
return 0;
}

3Ahora tú

Este programa lleva bien el estado pero nunca cuenta. Escribe la línea que suma una palabra, para que diga: 3

#include <stdio.h>
int main(void)
{
char t[30] = "hola que tal";
int palabras = 0;
int dentro = 0;
for (int i = 0; t[i] != 0; i++)
{
if (t[i] == ' ')
dentro = 0;
else if (dentro == 0)
{
dentro = 1;
}
}
printf("%d\n", palabras);
return 0;
}

↖︎ Tu línea va aquí, justo cuando se acaba de entrar en una palabra nueva.

Ejecutar

Lo que dice tu programa

↖︎ Escribe tu parte y dale a Ejecutar

Qué pasó

Aquí te aviso si tu programa hace algo raro.

    4Qué guarda tu programa

    La pila

    ↖︎ Ejecuta el programa para ver qué pasa por dentro