Algo asi jejeje:
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZEWORDS 25
typedef char TPalabra[MAXSIZEWORDS]; //Defino un tipo para hacer el codigo mas facil de entender
//---------------------------------------------------------------------------
//Prototipos de funciones
TPalabra* RellenarPalabras(int nPalabras);
int BuscarMenor(TPalabra *palabras, int nPalabras);
int BuscarMayor(TPalabra *palabras, int nPalabras);
void ShowWordsWithLong(unsigned int largo, int nPalabras, TPalabra *palabras);
//---------------------------------------------------------------------------
int main()
{
unsigned int nPalabras,mayor,menor;
TPalabra *palabras;
printf("Introduce el numero de palabras a introducir: ");
palabras = RellenarPalabras(nPalabras); //Creo el array de palabras y lo relleno
if(palabras == NULL){
printf("\nNo se pudo allocar la memoria necesaria para las palabras.\n\n"); }else{
mayor = BuscarMayor(palabras,nPalabras); //Busco el largo mayor de las palabras
menor = BuscarMenor(palabras,nPalabras); //Busco el largo menor de las palabras
if(mayor == 0){ //Si no se introdujo ninguna palabra...
printf("\nNo se introdujo ninguna palabra.\n"); }else{ //Si se introdujo alguna palabra...
printf("\nLa palabra mas larga tiene %i caracteres.\n\n",mayor
); //Muestro el largo mayor printf("Palabras con el largo mayor:\n"); ShowWordsWithLong(mayor, nPalabras, palabras); //Muestro las palabras con el mayor largo
printf("\nLa palabra mas corta tiene %i caracteres.\n\n",menor
); //Muestro el largo mayor printf("Palabras con el largo menor:\n"); ShowWordsWithLong(menor, nPalabras, palabras); //Muestro las palabras con el mayor largo
}
if(palabras != NULL)
free(palabras
); //Libero la memoria solicitada para almacenar las palabras }
return 0;
}
//---------------------------------------------------------------------------
int BuscarMenor(TPalabra *palabras, int nPalabras)
{
int i;
unsigned int menor=MAXSIZEWORDS, largo;
if(palabras != NULL){
//Relleno el array de cadenas
for(i=0;i<nPalabras;i++){
largo
= strlen(palabras
[i
]); //Obtengo el largo de la palabra if(largo < menor) //Si es mayor que el largo mayor lo guardo
menor = largo;
}
}
return menor;
}
//---------------------------------------------------------------------------
int BuscarMayor(TPalabra *palabras, int nPalabras)
{
int i;
unsigned int mayor=0,largo;
if(palabras != NULL){
//Relleno el array de cadenas
for(i=0;i<nPalabras;i++){
largo
= strlen(palabras
[i
]); //Obtengo el largo de la palabra if(largo > mayor) //Si es mayor que el largo mayor lo guardo
mayor = largo;
}
}
return mayor;
}
//---------------------------------------------------------------------------
TPalabra* RellenarPalabras(int nPalabras)
{
int i,largoPalabra;
TPalabra *palabras;
palabras
= malloc(sizeof(TPalabra
) * nPalabras
); //Solicito memoria para almacenar las palabras if(palabras != NULL){
//Limpio la memoria reservada
memset(palabras
,'0',sizeof(TPalabra
) * nPalabras
);
fflush(stdin
); //Limpio el buffer de entrada
//Relleno el array de cadenas
for(i=0;i<nPalabras;i++){
printf("Introduce elemento [%i]: ",i
); fgets(palabras
[i
],MAXSIZEWORDS
,stdin
); //Con fgets se evita el derbordamiento fflush(stdin
); //Limpio el buffer de entrada largoPalabra
= strlen(palabras
[i
])-1; palabras[i][largoPalabra] = '\0'; //Sustituyo el '\n' por '\0'
}
}
return palabras;
}
//---------------------------------------------------------------------------
void ShowWordsWithLong(unsigned int largoPalabra, int nPalabras, TPalabra *palabras)
{
int i;
//Muestro todas las palabras cuyo largo sea igual al mayor
for(i=0;i<nPalabras;i++)
if(strlen(palabras
[i
]) == largoPalabra
) }