Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Angel20810 en 3 Marzo 2017, 01:58 am



Título: contador de palabras, con funcion que devuelve valor erroneo
Publicado por: Angel20810 en 3 Marzo 2017, 01:58 am
Código
  1. include <stdio.h>
  2. #include <conio.h>
  3. #include <math.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. int conv()
  8. {
  9. char frase[200];
  10. int cont,x,y,lon,cont2;
  11.  
  12.  
  13.    printf("ingresa una frase\n");
  14.    fflush(stdin);
  15.    gets(frase);
  16.    lon=strlen(frase);
  17.    for(x=0;x<=lon;x++)
  18.    {
  19.    if(frase[x]=='a')
  20. {
  21.  
  22. cont=cont+1;
  23. return cont;
  24.  
  25.  
  26. }
  27.    }
  28.  
  29.    }
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37. main()
  38. {
  39. int z;
  40. z=conv();
  41. printf("%d",z);
  42.  
  43.  
  44.  
  45. return 0;
  46. }
  47.  


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: contador de palabras, con funcion que devuelve valor erroneo
Publicado por: engel lex en 3 Marzo 2017, 04:23 am
tu codigo no tiene mucho sentido para contar palabras, explica que intentas y que error te da

por cierto,

Código:
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


Título: Re: contador de palabras, con funcion que devuelve valor erroneo
Publicado por: integeroverflow en 4 Marzo 2017, 15:10 pm
Código
  1. include <stdio.h>
  2. [..]code[..]
  3.  

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:

Código
  1. int contar_palabras(char *frase)
  2. {
  3. int palabras = 0;
  4. char ultimo = 0x00;
  5.    while(*frase)
  6.    {
  7. if((*frase == ' ') && (ultimo != ' '))
  8.                {
  9. palabras++;
  10.                }
  11. ultimo = *frase;
  12. *frase++;
  13. }
  14. if(ultimo == ' ') return palabras;
  15. else return palabras+1;
  16. }
  17.  

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.