Foros del Web » Programación para mayores de 30 ;) » C/C++ »

longitud de una cadena en C

Estas en el tema de longitud de una cadena en C en el foro de C/C++ en Foros del Web. tengo el codigo el problema esque no se como hacerle para que en pantalla me aparezca lo siguiente __________________________________________________ ________ejemplo Introdusca sus cadenas: 1:azul 2:azul ...
  #1 (permalink)  
Antiguo 27/02/2015, 18:23
 
Fecha de Ingreso: febrero-2015
Mensajes: 3
Antigüedad: 9 años, 2 meses
Puntos: 0
Pregunta longitud de una cadena en C

tengo el codigo
el problema esque no se como hacerle para que en pantalla me aparezca lo siguiente

__________________________________________________ ________ejemplo

Introdusca sus cadenas:
1:azul
2:azul
3:azul
4:azul
5:azul
6:azul
7:unodostrescuatro
8:unodostrescuatro
9:hola
10:hola
la longitud de la cadena mayor es: 16(letras de la cadena)
las cadenas con logitud igual son:
unodostrescuatro
unodostrescuatro
__________________________________________________ _________
__________________________________________________ _________
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. char cad[255];    
  7. int i,cont=0;
  8. printf("Introduzca la cadena:\n");
  9. scanf("%s",cad);
  10. for (i=0;cad[i]!='\0';i++)
  11. cont=cont+1;
  12. printf(" la cadena contiene %i caracteres\n",cont);
  13. system("pause");
  14. return 0;
  15. }
este codigo solo me muestra en pantalla lo siguiente
intruduzca la cadena:
holamundotierra
la longitud de la cadena mayor es:
15

Última edición por razpeitia; 27/02/2015 a las 20:31
  #2 (permalink)  
Antiguo 27/02/2015, 20:36
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: longitud de una cadena en C

¿Cual es problema? (Por tu código podría decir que todo)

¿Quieres que te hagamos o que?

¿Haz intentado dividir tu programa en pasos o programas mas pequeños hasta que sean fáciles de resolver o triviales y después juntar esos pasos?
  #3 (permalink)  
Antiguo 02/03/2015, 03:46
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: longitud de una cadena en C

Cita:
Iniciado por razpeitia Ver Mensaje
¿Cual es problema? (Por tu código podría decir que todo)

¿Quieres que te hagamos o que?

¿Haz intentado dividir tu programa en pasos o programas mas pequeños hasta que sean fáciles de resolver o triviales y después juntar esos pasos?
+1. Se me ocurre que podrias crear un array de char* donde se almacenen las cadenas introducidas, luego para saber cual es mas largo pues simplemente recorres el array y en una variable int vas almacenando el largo mayor encontrado. Cuando termine el bucle tendras el mayor. Ahora repites el bucle pero en este caso para imprimir todas las que sean de ese largo.
  #4 (permalink)  
Antiguo 02/03/2015, 07:00
 
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. }
  #5 (permalink)  
Antiguo 02/03/2015, 21:11
 
Fecha de Ingreso: febrero-2015
Mensajes: 3
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: longitud de una cadena en C

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;
}
  #6 (permalink)  
Antiguo 03/03/2015, 01:18
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: longitud de una cadena en C

Código C++:
Ver original
  1. int main()
  2. {
  3. int mayor=100;
  4.  
  5. // ...
  6. for(y=1;y<=x;y++)
  7. {
  8.    if(longitud[y]<=mayor)

En tu caso, mayor siempre es igual a 100, se supone que tienes que hacer que "mayor" almacene la longitud máxima. Una opción puede ser asignarle a "mayor" un valor no válido (0 o cualquiera negativo) y, al ir añadiendo las cadenas, comparar la longitud de la cadena actual con "mayor", si la longitud actual es mayor, sustituyes el valor. Al final del bucle tendrás en "mayor" el valor de la longitud máxima.

Por otro lado, no hace falta que vayas almacenando en un array la longitud de cada cadena. Dado que para acceder a cada uno de esos valores vas a tener que iterar sobre un array, es más sencillo llamar a strlen( cadena[i] ) cada vez que quieras conocer la longitud de una cadena en concreto. Te lo digo porque así te puedes quitar de encima una variable.

En cuanto al supuesto de elegir un índice y mostrar todas las cadenas que tengan la misma longitud... basta con calcular en primer lugar la longitud de la cadena seleccionada. Después iteras sobre todas las cadenas y comparas su longitud con la pedida... si coinciden la muestras y listo.

Un saludo.
  #7 (permalink)  
Antiguo 03/03/2015, 05:24
 
Fecha de Ingreso: marzo-2015
Mensajes: 2
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: longitud de una cadena en C

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int main()
  5. {
  6.     char cadenas[10][100];
  7.     int longitud[10], cantidad=0, x, y, mayor=100;
  8.  
  9.     for(x=0;x<10;x++)   // OJO! el primer elemento tiene subindice 0
  10.     {
  11.         printf("ingresa una cadena %i: ",x);
  12.         scanf("%s",cadenas[x]);
  13.         longitud [x]= strlen(cadenas[x]);
  14.     }
  15.  
  16.     for(y=0;y<10;y++)   // Lo mismo citado anteriormente
  17.     {
  18.         if (y==0)  // solo si es el primero, asignar longitud a mayor
  19.             mayor = longitud[0];
  20.         if (longitud[y]>mayor)
  21.             mayor=longitud[y];
  22.     }
  23.     printf("longitud de cadena mayor %i\n",mayor);
  24.     printf("Longitud de cadena a evaluar: ");
  25.     scanf("%i",cantidad);
  26.  
  27.     printf("cadenas que corresponden a la longitud: %i\n",cantidad);
  28.     for(x=0;x<10;x++)   // OJO! el primer elemento tiene subindice 0
  29.         if (longitud[x]==cantidad)
  30.             printf("%i: %s\n",x+1, cadenas[x]);
  31.  
  32.     return 0;
  33. }

Última edición por murfo; 03/03/2015 a las 05:30 Razón: Ajuste
  #8 (permalink)  
Antiguo 03/03/2015, 05:40
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: longitud de una cadena en C

Buenas murfo, bienvenido al foro.

Te cuento:

* No es necesario que uses 'x' e 'y' para los bucles, dado que éstos no se solapan te puedes ahorrar una de las dos variables

* ¿Por qué calculas la longitud máxima en un bucle independiente? Lo puedes hacer sobre la marcha cuando le pides al usuario las cadenas.

* No es necesario usar el array "longitud". Tampoco es que el rendimiento de este algoritmo se vaya a ver resentido por calcular la longitud de las cadenas varias veces.

* Te he corregido un pequeño detalle en el código. He añadido un comentario al respecto.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.      
  4. int main()
  5. {
  6.   char cadenas[10][100];
  7.   int cantidad, x, longitud, mayor = -1;
  8.      
  9.   for(x=0;x<10;x++)   // OJO! el primer elemento tiene subindice 0
  10.   {
  11.     printf("ingresa una cadena %i: ", x+1); // <--- el primer índice es 0. En el último bucle haces exactamente esta misma modificación
  12.     scanf("%s",cadenas[x]);
  13.     longitud = strlen( cadenas[x] );
  14.     if ( mayor < longitud )
  15.       mayor = longitud;
  16.   }
  17.      
  18.   printf("longitud de cadena mayor %i\n",mayor);
  19.   printf("Longitud de cadena a evaluar: ");
  20.   scanf("%i",cantidad);
  21.      
  22.   printf("cadenas que corresponden a la longitud: %i\n",cantidad);
  23.   for( x=0;x<10;x++)   // OJO! el primer elemento tiene subindice 0
  24.   {
  25.     if ( strlen( cadenas[x] ) == cantidad )
  26.       printf("%i: %s\n",x+1, cadenas[x]);
  27.   }  
  28.  
  29.   return 0;
  30. }

Por lo demás, poco que contar, el código funciona como se espera de el :)

Un saludo
  #9 (permalink)  
Antiguo 03/03/2015, 07:38
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: longitud de una cadena en C

El mio hace lo mismo pero apliqué la estrategia de divide y vencerás para hacer cada cosa en una funcion y que le fuese mas facil de entender pero por lo visto no se enteró de nada XD
Ojo, aviso para el que no lo sepa, scanf al igual que gets no controlan el desbordamiento y, aunque en este caso no habrá palabra en el diccionario capaz de llegar a 99 caracteres, es algo a tomar en cuenta para futuras utilizaciones. Mejor usar fgets que recibe el largo maximo y así evitamos el desbordamiento de la variable.
Al menos podria haberse molestado en compilar mi codigo y ver que hacia jejeje.
  #10 (permalink)  
Antiguo 03/03/2015, 09:15
 
Fecha de Ingreso: marzo-2015
Mensajes: 2
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: longitud de una cadena en C

Cita:
Iniciado por aguml Ver Mensaje
El mio hace lo mismo pero apliqué la estrategia de divide y vencerás para hacer cada cosa en una funcion y que le fuese mas facil de entender pero por lo visto no se enteró de nada XD
Ojo, aviso para el que no lo sepa, scanf al igual que gets no controlan el desbordamiento y, aunque en este caso no habrá palabra en el diccionario capaz de llegar a 99 caracteres, es algo a tomar en cuenta para futuras utilizaciones. Mejor usar fgets que recibe el largo maximo y así evitamos el desbordamiento de la variable.
Al menos podria haberse molestado en compilar mi codigo y ver que hacia jejeje.
aguml, sin ánimo de ofender o criticar: Tu código está muy bien, sin embargo para alguien novato en la programación se torna algo confuso (manejo de funciones con apuntadores en parámetro y retorno, funciones no muy comunes como fflush, manejo de memoria dinámica y extremo control en la validación de entrada de datos).

Etiquetas: cadena, char, int, longitud
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:53.