contador de palabras, con funcion que devuelve valor erroneo

Iniciado por Angel20810, 3 Marzo 2017, 01:58 AM

0 Miembros y 1 Visitante están viendo este tema.

Angel20810

include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

int conv()
{
char frase[200];
int cont,x,y,lon,cont2;


   printf("ingresa una frase\n");
   fflush(stdin);
   gets(frase);
   lon=strlen(frase);
   for(x=0;x<=lon;x++)
   {
   if(frase[x]=='a')
{

cont=cont+1;
return cont;


}
   }

   }







main()
{
int z;
z=conv();
printf("%d",z);



return 0;
}



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

engel lex

tu codigo no tiene mucho sentido para contar palabras, explica que intentas y que error te da

por cierto,

fflush(stdin);

no se hace

lee esto
https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

integeroverflow

Cita de: Angel20810 en  3 Marzo 2017, 01:58 AM
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.