[ Foro de C ]

ayuda en longitud de cadena mayor en lenguaje C

03-Mar-2015 04:18
Invitado (jesusmoreno)
2 Respuestas

lo que necesito es que el programa indique cual es la mayor longitud y cuales cadenas o palabras tienen la misma cantidad de letras (longitud) en este caso si ingreso los 10 valores


ingresa la cadena 1:azul (((esto de ingresar todas las cadenas ya lo tengo bien))
ingresa la cadena 2:azul
ingresa la cadena 3:azul
ingresa la cadena 4:casamitierra
ingresa la cadena 5:oscar
ingresa la cadena 6:casamitierra 
ingresa la cadena 7:casamitierra
ingresa la cadena 8:hola
ingresa la cadena 9:agua
ingresa la cadena 10:casamitierra

longitud de cadena mayor : 12 (((ESTO ES LO QUE ME FALLA , NO ME DICE CUAL ES LA LONGITUD MAS GRANDE ))))

cadenas que corresponden a la longitud: 4 (((Y ESTO TAMBIEN ME FALLA))))
4: casamitierra
6: casamitierra
7: casamitierra
10: casamitierra 


"ayuda please" ocupo el codigo bien en Lenguaje C


#include<stdio.h>
#include<string.h>
int main()
{
char cadenas[10][100];
int longitud[10], cantidad=0, x, y, mayor=100;

for(x=1;x<=10;x++)
{
printf("ingresa una cadena %i: ",x);

scanf("%s",cadenas[x]);
longitud [x]= strlen(cadenas[x]);
}
for(y=1;y<=x;y++)
{
if(longitud[y]<=mayor)
{
cantidad=longitud[y];
cantidad=cantidad+1;
}
}
printf("longitud de cadena mayor %i\n",cantidad);
printf("cadenas que corresponden a la longitud: %i\n",mayor);
return 0;
}




03-Mar-2015 12:41
Invitado (Caranim)

Al principio del programa la variable "mayor" la igualas a 100. Como lo que buscas es la cantidad mayor, me parece más correcto inicializarla a un número muy bajo ( cero ) para que tenga en cuenta cualquier longitud.


//Recorremos las cadenas introducidas y comparamos la longitud  con lo 
// guardado en "mayor":

 if(longitud[y]>mayor) 
 { 
// Al ser mayor, actualizamos la longitud máxima y reiniciamos el contador "cantidad"
   cantidad=1; 
   mayor = longitud[y];
 } 
  else if(longitud[y]==mayor) 
// Es igual que la cadena mayor: Incrementamos en uno el número de frases con esa longitud.
 { 
   cantidad+=1;
 } 

//Por último mostramos los datos:

printf("longitud de cadena mayor %i\n",mayor); 
printf("cadenas que corresponden a la longitud: %i\n",cantidad);



Con estas modificaciones creo que ya funciona correctamente.


04-Mar-2015 00:42
Nacho Cabanes (+83)

Básicamente coincido con Caranim. Sólo falta mostrar con un "for" todas las cadenas que tengan esa longitud máxima que has encontrado.

Aun así, tu fuente tiene también otros errores, como por ejemplo:

- Concepto: Los "for" empiezan en 1 y deberían empezar en 0. De igual modo, no deberían llegar al valor 10.

- Concepto: Los valores que muestras al final son lo contrario de lo que deberían: "cantidad" como longitud y "mayor" como número de cadenas encontradas.

- Lógica: No actualizas el valor de la variable "mayor".

- Estilo: Está mal tabulado, supongo que por usar el símbolo de tabulación en vez de espacios, lo que lo hace difícil de leer.

- Estilo: Declaras a la vez variables que no están relacionadas y usas nuevas variables cuando podría reutilizar otras que existen (el contador del "for").

- Estilo: No necesitas un array de longitudes, salvo que sea por optimizar velocidad o porque te lo pidan expresamente. Las longitudes se pueden calcular al vuelo.

Debería ser algo como esto (que no puedo probar ahora, pero que debería tener pocos errores, espero):


#include <stdio.h>
#include <string.h>

#define CANTIDAD 10
int main()
{
    char cadenas[CANTIDAD][100];
    int i;
    int encontrados = 0;
    int mayor = -1;

    // Fase de pedir datos
    for(i = 0; i < CANTIDAD; i++)
    {
        printf("ingresa la cadena %d: ",i+1);
        scanf("%s",cadenas[i]);
    }
    
    // Fase de buscar mayor longitud
    for(i = 0; i < CANTIDAD; i++)
    {
        if(strlen(cadenas[i]) > mayor)
        {
            mayor = strlen(cadenas[i]);
            cantidad = 1;
        }
        else if(strlen(cadenas[i]) == mayor)
        {
            cantidad++;
        }
    }
    
    printf("longitud de cadena mayor %d\n",mayor);
    printf("cadenas que corresponden a la longitud: %d\n",cantidad);
    
    // Fase de buscar  y mostrar cadenas resultado
    for(i = 0; i < CANTIDAD; i++)
    {
        if(strlen(cadenas[i]) == mayor)
        {
            printf(%d : %s", i+1, cadenas[i]);
        }
    }
    
    return 0;
}








(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)