Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: erickcasita en 4 Enero 2018, 18:21 pm



Título: Contar letras en cualquier oración
Publicado por: erickcasita en 4 Enero 2018, 18:21 pm

Hola, he estado haciendo este ejercicio para contar las letras de una frase, al parecer funciona bien pero necesito saber que más agregarle o si me falta algo...
Muchas gracias


Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main() {
  5. char nomb[100];
  6. int let, cont = 1;
  7. printf("Ingrese una frase\n");
  8. fflush(stdin);
  9. fgets(nomb, 100, stdin); //saco la longitud original
  10. let = strlen(nomb);
  11.  
  12. for (int i = 0; i < let; i++) {
  13.  
  14. if (nomb[i] == ' ') {
  15.  
  16. cont++; //cuento los espacios en blanco
  17.  
  18. }
  19. }
  20. let = let - cont; // al final simplemente lo resto a la longitud original.
  21. printf("\n La frase tiene  %d palabras", let);
  22.  
  23. return 0;
  24. }
  25.  
  26.  


Título: Re: Contar letras en cualquier oración
Publicado por: fary en 4 Enero 2018, 21:04 pm
Está bien, aunque lo puedes remusir un poco  :)

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. char nomb[100];
  6. int i, a = -1;
  7.  
  8. printf("Introduce tu frase: ");
  9.    fflush(stdin);
  10. fgets(nomb, 100, stdin);
  11.  
  12. for (i = 0; nomb[i] != '\0'; i++)
  13.    {
  14.        if (nomb[i] != ' ') a++;
  15.    }
  16.  
  17.    printf("Hay %i letras.\n", a);
  18.  
  19. return 0;
  20. }
  21.  

saludos.


Título: Re: Contar letras en cualquier oración
Publicado por: MAFUS en 4 Enero 2018, 22:07 pm
Te recomiendo la librería ctype.h. Tiene funciones para discriminar letras, números, caracteres imprimibles, etc.
Tú programa solo busca espacios; una tabulación, signos o números serán cobrados como letras.


Título: Re: Contar letras en cualquier oración
Publicado por: erickcasita en 5 Enero 2018, 03:18 am
Me puse a investigar un poco sobre la librería cytpe.h  y logre hacer esto espero quede correcto:
saludos cordiales

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. int main() {
  6. char nomb[100];
  7. int let, cont, contsig, contespa;
  8. int suma, rptaletra;
  9. printf("Ingrese una frase\n");
  10. fflush(stdin);
  11. fgets(nomb, 100, stdin);
  12. let = strlen(nomb);//saco la longitud original
  13.  
  14. for (int i = 0; i < let; i++) {
  15.  
  16. if (isdigit(nomb[i])) {
  17.  
  18. cont++; //cuento los numeros
  19. }
  20. if (ispunct(nomb[i])) {
  21.  
  22. contsig++; //cuento los signos etc..
  23.  
  24. }
  25. if (isspace(nomb[i])) {
  26.  
  27. contespa++; //cuento los espacios etc..
  28. }
  29. suma = cont + contsig + contespa; / sumo los contadores
  30. }
  31.  
  32. rptaletra = let - suma; // al final simplemente lo resto a la longitud original.
  33. printf("\n La frase tiene  %d letras", rptaletra);
  34.  
  35. return 0;
  36. }
  37.  
  38.  
  39.  


Título: Re: Contar letras en cualquier oración
Publicado por: MAFUS en 5 Enero 2018, 03:52 am
No hace falta que sean contadores diferentes, puedes seguir incrementando el mismo. También tienes isalpha que discrimina letras, pero ahora no sé si con el correspondiente locales en español también le entran acentos y eñes.


Título: Re: Contar letras en cualquier oración
Publicado por: erickcasita en 5 Enero 2018, 04:19 am
de hecho  el carácter ñ lo toma como si fueran 2.  :(


Título: Re: Contar letras en cualquier oración
Publicado por: vangodp en 7 Enero 2018, 17:22 pm
de hecho  el carácter ñ lo toma como si fueran 2.  :(
En windows sale bien:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <locale.h>
  5. int main() {
  6. //setlocale(LC_ALL, "");
  7. int let=0, cont=0, contsig=0, contespa=0;
  8. int suma=0, rptaletra=0, i;
  9. char nomb[100];
  10.  
  11. scanf("%99[^\n]%*c", nomb);
  12. let = strlen(nomb);
  13.  
  14. for (i = 0; i < let; i++) {
  15. if (isdigit(nomb[i])) {
  16.  
  17. cont++; //cuento los numeros
  18. }
  19. if (ispunct(nomb[i])) {
  20.  
  21. contsig++; //cuento los signos etc..
  22.  
  23. }
  24. if (isspace(nomb[i])) {
  25.  
  26. contespa++; //cuento los espacios etc..
  27. }
  28. suma = cont + contsig + contespa; // sumo los contadores
  29. }
  30. rptaletra = let - suma; // al final simplemente lo resto a la longitud original.
  31. printf("\n La frase tiene  %d letras", rptaletra);
  32. return 0;
  33. }
  34.  
(https://image.prntscr.com/image/6gfZDLGVS2GMF4lzwb4xvQ.png)


Título: Re: Contar letras en cualquier oración
Publicado por: erickcasita en 7 Enero 2018, 17:44 pm
Estuve leyendo algo sobre locale.h pero no entiendo muy bien.  Aquí el linux sigue contado el carácter "ñ" y los acentos como 2 carácteres. ¿qué podría estar pasando?


Título: Re: Contar letras en cualquier oración
Publicado por: vangodp en 7 Enero 2018, 18:10 pm
Puede ser el codepage de la terminal. Puede que esté seteada como unicode o utf. Debe haber algo como una función que te diga el codepage actual, y otra para modificar, pero realmente no estoy muy seguro de nada ya que no sé mucho sobre linux. Pero sé que em algunas paginas de código los acentos son contados como una letra más, o sea, 'ñ' seria contado como 2 letras, el '~'  más 'n'. En todo caso aguarde alguien que tenga algo más de luces mejor que yo. >_<