elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cuenta palabrasy letras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cuenta palabrasy letras  (Leído 1,924 veces)
mc275

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Cuenta palabrasy letras
« en: 11 Marzo 2017, 05:19 am »

Hola necesito:
Escribir un programa que solicite al usuario ingresar una cadena larga formada por varias palabras, el programa debe determinar lo siguiente:

1-numero de palabras en la cadena
2-cuantas vocales tiene la cadena
3-la letra que aparece en mas palabras (letra y en cuantas palabras)
4-la letra que mas aparece en toda la frase (letra y cuantas veces)

hasta el  momento he logrado los primeros 2 incisos, pero no se como hacer el 3 ni el 4, se los agradecería mucho si me ayudaran un poco.

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. int contar_vocales(char *);
  7.  
  8. int main(){
  9. char cad[500],*p;
  10. int longi,i,x,b,R,V,longinP,len;
  11.  
  12. printf("Ingrese un texto: ");
  13. gets(cad);
  14. longi = strlen(cad);
  15.  
  16. //-------------------------------Contador palabras------------------------------
  17. b=0;
  18. for(x=0;x<longi;x++){ //rrecorre la longitud de la cadena
  19. if(cad[x]==' ' && x!=499 && cad[x+1]!= ' '){
  20.  b++;
  21.  }
  22. }
  23. printf("\nCantidad de Palabras: %d",b+1);
  24. //--------------------------------cantidad------------------------------------
  25.  
  26. printf("\nCantidad de Vocales: %d",contar_vocales(cad));
  27. V = contar_vocales(cad);
  28. printf("\nCantidad de caracteres: %d",longi-b);
  29. longinP= longi-b;
  30.  
  31.  
  32.  
  33.  
  34.  
  35.    getch();
  36. }//Main -CuerpoPrincipal-
  37. //--------------------------------Funcion---------------------------------------
  38.  
  39. int contar_vocales(char *cad){
  40.  
  41. int cont=0;
  42. char *aux=cad;
  43.  
  44. while(*aux){
  45.   if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u')
  46.     cont++;
  47.       aux++;
  48.   }//funcion
  49.  
  50. return cont;
  51.  
  52. }//contar_vocales
  53.  


« Última modificación: 11 Marzo 2017, 05:35 am por mc275 » En línea

integeroverflow

Desconectado Desconectado

Mensajes: 60


Ver Perfil
Re: Cuenta palabrasy letras
« Respuesta #1 en: 15 Marzo 2017, 05:46 am »

Hola necesito:
Escribir un programa que solicite al usuario ingresar una cadena larga formada por varias palabras, el programa debe determinar lo siguiente:

1-numero de palabras en la cadena
2-cuantas vocales tiene la cadena
3-la letra que aparece en mas palabras (letra y en cuantas palabras)
4-la letra que mas aparece en toda la frase (letra y cuantas veces)

hasta el  momento he logrado los primeros 2 incisos, pero no se como hacer el 3 ni el 4, se los agradecería mucho si me ayudaran un poco.

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. int contar_vocales(char *);
  7.  
  8. int main(){
  9. char cad[500],*p;
  10. int longi,i,x,b,R,V,longinP,len;
  11.  
  12. printf("Ingrese un texto: ");
  13. gets(cad);
  14. longi = strlen(cad);
  15.  
  16. //-------------------------------Contador palabras------------------------------
  17. b=0;
  18. for(x=0;x<longi;x++){ //rrecorre la longitud de la cadena
  19. if(cad[x]==' ' && x!=499 && cad[x+1]!= ' '){
  20.  b++;
  21.  }
  22. }
  23. printf("\nCantidad de Palabras: %d",b+1);
  24. //--------------------------------cantidad------------------------------------
  25.  
  26. printf("\nCantidad de Vocales: %d",contar_vocales(cad));
  27. V = contar_vocales(cad);
  28. printf("\nCantidad de caracteres: %d",longi-b);
  29. longinP= longi-b;
  30.  
  31.  
  32.  
  33.  
  34.  
  35.    getch();
  36. }//Main -CuerpoPrincipal-
  37. //--------------------------------Funcion---------------------------------------
  38.  
  39. int contar_vocales(char *cad){
  40.  
  41. int cont=0;
  42. char *aux=cad;
  43.  
  44. while(*aux){
  45.   if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u')
  46.     cont++;
  47.       aux++;
  48.   }//funcion
  49.  
  50. return cont;
  51.  
  52. }//contar_vocales
  53.  


para el 3 y el 4 podes hacer un array con la misma cantidad de caracteres del abecedario, en uppercase y lowercase, inicializando todos sus elementos a 0.
entonces recorres la cadena letra por letra y te fijas que letra es, buscas su elemento correspondiente en el array que hiciste y sumas 1.
despues para ver que letra se repitio mas veces, haces una funcion que recorra cada elemento del array que creaste. esta funcion va a tener 2 variables, una de tipo char, y otra de tipo int o short.

por cada iteracion:
chequeamos que el valor del elemento actual del array sea mayor que el valor del int/short de la funcion.
si es mayor, guardamos el valor del elemento actual del array en el int o short.
en el char, guardamos el caracter que corresponde a ese elemento del array.
continuamos.

cuando termines de recorrer todo el array, tendras en char el caracter que mas veces se repitio en la cadena, y el numero de veces que se repitio.

con ese mismo algoritmo, podes separar la frase en palabras y completar el punto 3.

no se si me entendiste, avisa cualquier cosa.
(puede haber alguna forma mas optimizada de realizar eso mismo, por ahora es la unica que se me ocurre)


En línea

mc275

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: Cuenta palabrasy letras
« Respuesta #2 en: 15 Marzo 2017, 05:50 am »

Muchas gracias, ahorita mismo trabajare en eso, gracias
En línea

integeroverflow

Desconectado Desconectado

Mensajes: 60


Ver Perfil
Re: Cuenta palabrasy letras
« Respuesta #3 en: 15 Marzo 2017, 06:05 am »

Muchas gracias, ahorita mismo trabajare en eso, gracias


estaba aburrido e hice este programa, espero que te sirva de algo:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. char arreglo[26];
  6.  
  7. int main(int argc, char **argv)
  8. {
  9. if(!argv[1]) return 0;
  10. memset(arreglo, 0, 26); // inicializamos a 0 todos los elementos del arreglo
  11. while(*argv[1]) // recorremos la cadena introducida
  12. {
  13. if((*argv[1] > 64 && *argv[1] < 91 ) || (*argv[1] > 96 || *argv[1] < 123)) // si es una letra
  14. {
  15. arreglo[tolower(*argv[1])-97] ++; // la tratamos como lowercase y le restamos el codigo ascii de modo que la primer letra minuscula (ascii 97) coincida con el elemento 0 del array, y asi con todas las demas letras.
  16. }
  17. *argv[1]++;
  18. }
  19.  
  20. char carac = 0;
  21. short veces = 0;
  22. for(int i=0; i<26; i++)
  23. {
  24. if(arreglo[i] > veces) { // si el elemento actual que estamos analizando tiene un valor mayor a el ultimo elemento que asumimos que era el que mas veces estuvo en la cadena, sobreescribimos el anterior con el actual
  25. veces = arreglo[i];
  26. carac = i+97; // le sumamos de nuevo el codigo ascii para recuperar el caracter
  27. }
  28. }
  29.  
  30. printf("La letra que mas aparece es la letra \'%c\', %d veces.\n", carac, veces);
  31. }
  32.  

salida:

Código:
xxx@XXX:~$ ./a.out aaaaaaaapompomkopk
La letra que mas aparece es la letra 'a', 8 veces.
xxx@XXX:~$ ./a.out aaaaaaaapompomkopkmpmo
La letra que mas aparece es la letra 'a', 8 veces.
xxx@XXX:~$ ./a.out asdoimaspsaoaakjajaajssnma
La letra que mas aparece es la letra 'a', 9 veces.
xxx@XXX:~$ ./a.out asppppppppass
La letra que mas aparece es la letra 'p', 8 veces.
xxx@XXX:~$ ./a.out asppppppppass
La letra que mas aparece es la letra 'p', 8 veces.
xxx@XXX:~$ ./a.out axxxxxxxxxpsapaas
La letra que mas aparece es la letra 'x', 9 veces.
xxx@XXX:~$ ./a.out axxxxxxxxxxxxpsapaas
La letra que mas aparece es la letra 'x', 12 veces.

« Última modificación: 15 Marzo 2017, 06:16 am por integeroverflow » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines