include <stdio.h>
[..]code[..]
lo que intentas es contar las palabras de la frase de esta forma?
"asdas asdasda asdsadas asdsad asdasd" retornaria 5?
en ese caso, podrias hacer algo asi:
int contar_palabras(char *frase)
{
int palabras = 0;
char ultimo = 0x00;
while(*frase)
{
if((*frase == ' ') && (ultimo != ' '))
{
palabras++;
}
ultimo = *frase;
*frase++;
}
if(ultimo == ' ') return palabras;
else return palabras+1;
}
lo que hace esta funcion es recorrer caracter por caracter la cadena. si encuentra un espacio, significa que es el fin de una palabra. entonces suma 1 a la cuenta de palabras y sigue buscando.
tambien compara el caracter que esta analizando con el ultimo caracter analizado, y si es un espacio lo ignora. esto es para ignorar multiples espacios, de modo que "asd asd asd asd" devuelva el mismo numero de palabras que "asd asd asd asd".
a lo ultimo, compara el ultimo caracter leido con un espacio.
si es un espacio, retorna el numero de palabras contadas.
si no es un espacio retorna el numero de palabras contadas mas uno.
por que? porque dijimos que un espacio significaba el final de una palabra. entonces la cadena "asd asd asd" nos daria como resultado 2 palabras, ya que la ultima no tiene ningun espacio que nos haga saber que ahi terminaba una palabra. entonces sumamos uno.
en caso de que la cadena termina en un espacio, devolvemos el valor de la cuenta y listo.