Aqui te va una propuesta de conteo de palabras con recursion...
(No es pa tanta frustración... Más se perdio en Cuba, que decía mi abuelo...
)
Decir que es imprescindible llevar control de la primera posición de la linea - si queremos admitir lineas vacias - y del resultado provisional.
Algunos casos de prueba...
(No es pa tanta frustración... Más se perdio en Cuba, que decía mi abuelo...


Decir que es imprescindible llevar control de la primera posición de la linea - si queremos admitir lineas vacias - y del resultado provisional.
Código (c) [Seleccionar]
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
// Immersion:
// ac = #i : 0 <= i < n : V[i]='nb' and (i>0 -> V[i-1]='b')
// (s act as index n, in C-ish style)
// 0 <= n <= len(p)
int num_wordG(const char *p,const char *s, int ac)
{
if (*s)
if (isspace(*s)) return num_wordG(p,++s,ac); // Rec.
else return num_wordG(p,s+1,ac+(p==s || isspace(*(s-1)))); // Rec.
return ac; // Basis case.
}
int main(int argc, char *args[])
{
char *line = NULL;
size_t len = 0 ;
ssize_t nread;
for ( ; (nread = getline(&line, &len, stdin)) != -1; )
{
line[nread-1]=0; // chop the \n
printf("%s -> %i\n",line,num_wordG(line,line,0));
}
free(line);
return 0;
}
Algunos casos de prueba...
Código [Seleccionar]
En un lugar de la Mancha
En un lugar de la Mancha -> 6
son 3 palabras
son 3 palabras -> 3
una
una -> 1
-> 0