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