Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/03/2015, 07:00
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: longitud de una cadena en C

Algo asi jejeje:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAXSIZEWORDS 25
  6.  
  7. typedef char TPalabra[MAXSIZEWORDS]; //Defino un tipo para hacer el codigo mas facil de entender
  8. //---------------------------------------------------------------------------
  9.  
  10. //Prototipos de funciones
  11. TPalabra* RellenarPalabras(int nPalabras);
  12. int BuscarMenor(TPalabra *palabras, int nPalabras);
  13. int BuscarMayor(TPalabra *palabras, int nPalabras);
  14. void ShowWordsWithLong(unsigned int largo, int nPalabras, TPalabra *palabras);
  15. //---------------------------------------------------------------------------
  16.  
  17. int main()
  18. {
  19.    unsigned int nPalabras,mayor,menor;
  20.    TPalabra *palabras;
  21.  
  22.    printf("Introduce el numero de palabras a introducir: ");
  23.    scanf("%i",&nPalabras);
  24.  
  25.    palabras = RellenarPalabras(nPalabras); //Creo el array de palabras y lo relleno
  26.  
  27.    if(palabras == NULL){
  28.       printf("\nNo se pudo allocar la memoria necesaria para las palabras.\n\n");
  29.    }else{
  30.       mayor = BuscarMayor(palabras,nPalabras); //Busco el largo mayor de las palabras
  31.       menor = BuscarMenor(palabras,nPalabras); //Busco el largo menor de las palabras
  32.       if(mayor == 0){ //Si no se introdujo ninguna palabra...
  33.          printf("\nNo se introdujo ninguna palabra.\n");
  34.       }else{ //Si se introdujo alguna palabra...
  35.          printf("\nLa palabra mas larga tiene %i caracteres.\n\n",mayor); //Muestro el largo mayor
  36.          printf("Palabras con el largo mayor:\n");
  37.          ShowWordsWithLong(mayor, nPalabras, palabras); //Muestro las palabras con el mayor largo
  38.  
  39.          printf("\nLa palabra mas corta tiene %i caracteres.\n\n",menor); //Muestro el largo mayor
  40.          printf("Palabras con el largo menor:\n");
  41.          ShowWordsWithLong(menor, nPalabras, palabras); //Muestro las palabras con el mayor largo
  42.       }
  43.       printf("\n");
  44.  
  45.       if(palabras != NULL)
  46.          free(palabras); //Libero la memoria solicitada para almacenar las palabras
  47.    }
  48.    system("PAUSE");
  49.    return 0;
  50. }
  51. //---------------------------------------------------------------------------
  52.  
  53. int BuscarMenor(TPalabra *palabras, int nPalabras)
  54. {
  55.    int i;
  56.    unsigned int menor=MAXSIZEWORDS, largo;
  57.  
  58.    if(palabras != NULL){
  59.       //Relleno el array de cadenas
  60.       for(i=0;i<nPalabras;i++){
  61.          largo = strlen(palabras[i]); //Obtengo el largo de la palabra
  62.          if(largo < menor) //Si es mayor que el largo mayor lo guardo
  63.             menor = largo;
  64.       }
  65.    }
  66.    return menor;
  67. }
  68. //---------------------------------------------------------------------------
  69.  
  70. int BuscarMayor(TPalabra *palabras, int nPalabras)
  71. {
  72.    int i;
  73.    unsigned int mayor=0,largo;
  74.  
  75.    if(palabras != NULL){
  76.       //Relleno el array de cadenas
  77.       for(i=0;i<nPalabras;i++){
  78.          largo = strlen(palabras[i]); //Obtengo el largo de la palabra
  79.          if(largo > mayor) //Si es mayor que el largo mayor lo guardo
  80.             mayor = largo;
  81.       }
  82.    }
  83.    return mayor;
  84. }
  85. //---------------------------------------------------------------------------
  86.  
  87. TPalabra* RellenarPalabras(int nPalabras)
  88. {
  89.    int i,largoPalabra;
  90.    TPalabra *palabras;
  91.  
  92.    palabras = malloc(sizeof(TPalabra) * nPalabras); //Solicito memoria para almacenar las palabras
  93.    if(palabras != NULL){
  94.       //Limpio la memoria reservada
  95.       memset(palabras,'0',sizeof(TPalabra) * nPalabras);
  96.  
  97.       fflush(stdin); //Limpio el buffer de entrada
  98.  
  99.       //Relleno el array de cadenas
  100.       for(i=0;i<nPalabras;i++){
  101.          printf("Introduce elemento [%i]: ",i);
  102.          fgets(palabras[i],MAXSIZEWORDS,stdin); //Con fgets se evita el derbordamiento
  103.          fflush(stdin); //Limpio el buffer de entrada
  104.          largoPalabra = strlen(palabras[i])-1;
  105.          palabras[i][largoPalabra] = '\0'; //Sustituyo el '\n' por '\0'
  106.       }
  107.    }
  108.    return palabras;
  109. }
  110. //---------------------------------------------------------------------------
  111.  
  112. void ShowWordsWithLong(unsigned int largoPalabra, int nPalabras, TPalabra *palabras)
  113. {
  114.    int i;
  115.  
  116.    //Muestro todas las palabras cuyo largo sea igual al mayor
  117.    for(i=0;i<nPalabras;i++)
  118.       if(strlen(palabras[i]) == largoPalabra)
  119.          printf("%s\n",palabras[i]);
  120. }