El código tuyo falla porque estás contando los espacios, cuando escribes:
Hola, qué tal tiene solo dos espacios, por lo tanto, para el programa solo tienes dos palabras. Si colocas una palabra, te dirá que hay cero palabras porque no tiene ningún espacio.
Así que porto una solución.
Código C:
Ver original#include <stdio.h>
#include <string.h>
size_t
countword (const char * words)
{
const char * aux;
size_t len = 0;
size_t wds = 0;
aux = words;
if (words == 0 || len <= 0)
return 0;
while (1)
{
if (!len)
break;
if (*(words) == 0x20)
wds++;
words++;
len--;
}
return (wds == 0 ? wds : wds+1);
}
int
main (void)
{
printf("%zu", countword
("Buenos días eh."));
return 0;
}
Aunque puede ser optimizado este código, solo te doy un ejemplo, además, como te dijo
vosk en un escenario real puedes encontrarte con cadenas mal espaciadas; Como por ejemplo:
Hola[espacio][espacio][espacio]como[espacio][espacio][espacio]estas, esto dirá que hay 6 palabras.
Aunque se podría dejar atrás esa lógica de contar las palabras por los espacios en la cadena y aplicar otra solución así:
Código C:
Ver original#include <stdio.h>
#include <string.h>
#include <ctype.h>
size_t
countword (const char * words)
{
const char * aux;
size_t len = 0;
size_t wds = 0;
unsigned int w = 0;
aux = words;
if (words == 0 || len <= 0)
return 0;
while (1)
{
if (!len)
break;
w = 1;
wds++;
}
if (*(words) == 0x20)
w = 0;
words++;
len--;
}
return wds;
}
Un saludo.