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

calcular la longitud de varias cadenas

Estas en el tema de calcular la longitud de varias cadenas en el foro de C/C++ en Foros del Web. Hola, estoy intentando contar el numero de caracteres de 3 cadenas, pero cuando compilo sólo me cuenta la longitud de la primera cadena. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 10/07/2010, 04:43
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
calcular la longitud de varias cadenas

Hola, estoy intentando contar el numero de caracteres de 3 cadenas, pero cuando compilo sólo me cuenta la longitud de la primera cadena.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.      
  6. int main(){
  7.          char cad1[100], cad2[100], cad3[100];
  8.          int longitud;
  9.          int long_cad(char[], char[], char[]);
  10.  
  11.          printf("Introduce una cadena: ");
  12.          scanf("%99s", cad1);
  13.          printf("Introduce una cadena: ");
  14.          scanf("%99s", cad2);
  15.          printf("Introduce una cadena: ");
  16.          scanf("%99s", cad3);
  17.  
  18.          longitud=long_cad(cad1, cad2, cad3);
  19.  
  20.          printf("La primera cadena tiene %d caracteres.\n", longitud);
  21.          printf("La segunda cadena tiene %d caracteres.\n", longitud);
  22.          printf("La tercera cadena tiene %d caracteres.\n", longitud);
  23. }
  24. int long_cad(char cad1[], char cad2[], char cad3[]){
  25.          int i,j,k;
  26.          i=0;
  27.          j=0;
  28.          k=0;
  29.  
  30.          while((cad1[i] != '\0') && (cad2[j] != '\0') && (cad3[k] != '\0')){
  31.               i++;
  32.               j++;
  33.               k++;
  34.          }
  35.          return(i,j,k);
  36. }

Compilación:
Introduce una cadena: pepe
Introduce una cadena: cristina
Introduce una cadena: esmeralda
La primera cadena tiene 4 caracteres.
La segunda cadena tiene 4 caracteres.
La tercera cadena tiene 4 caracteres.
  #2 (permalink)  
Antiguo 10/07/2010, 12:39
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: calcular la longitud de varias cadenas

no puedes hacer un return de esa forma...
  #3 (permalink)  
Antiguo 10/07/2010, 12:42
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: calcular la longitud de varias cadenas

Tu problema esta en la condicion del while, ya que cuando llegues al fin de unas de las cadenas se va a cortar.

Yo haria un while por cadena. o sino asi:

while((cad1[i] != '\0') || (cad2[j] != '\0') || (cad3[k] != '\0')){
if (cad1[i] != '\0') i++;
if (cad2[j] != '\0') j++;
if (cad3[k] != '\0') k++;
}

No estoy seguro que funcione correctamente, fijate y decime.


Ademas esto asi : return(i,j,k); solo te va a devolver el valor de k y no una tupla de tres valores. Si lo que queres es devolver la longitud de la suma de las tres cadenas sumalas y sino hace una funcion que calcule la longitud de una cadena y la llamas 3 veces.
  #4 (permalink)  
Antiguo 10/07/2010, 12:47
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: calcular la longitud de varias cadenas

o también podrias

printf("La primera cadena tiene %d caracteres.\n", strlen(cad1));
printf("La segunda cadena tiene %d caracteres.\n", strlen(cad2));
printf("La tercera cadena tiene %d caracteres.\n", strlen(cad3));
  #5 (permalink)  
Antiguo 10/07/2010, 12:57
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: calcular la longitud de varias cadenas

a ver si esto se sirve

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int str_lenght(char *);
  4.  
  5. int main(int argc, char **argv)
  6. {
  7.     char str1[100];
  8.     char str2[100];
  9.     char str3[100];
  10.    
  11.     printf("Introduce una cadena: ");
  12.     scanf("%99s", str1);
  13.     printf("Introduce una cadena: ");
  14.     scanf("%99s", str2);
  15.     printf("Introduce una cadena: ");
  16.     scanf("%99s", str3);
  17.    
  18.     printf("La primera cadena tiene %d caracteres\n", str_lenght(str1));
  19.     printf("La segunda cadena tiene %d caracteres\n", str_lenght(str2));
  20.     printf("La tercera cadena tiene %d caracteres\n", str_lenght(str3));
  21. }
  22.  
  23.  
  24. int str_lenght(char *str)
  25. {
  26.     int i = 0;
  27.    
  28.     while(str[i] != '\0')
  29.         i++;
  30.    
  31.     return i;
  32. }
  #6 (permalink)  
Antiguo 10/07/2010, 13:00
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: calcular la longitud de varias cadenas

length... lol
  #7 (permalink)  
Antiguo 10/07/2010, 14:17
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: calcular la longitud de varias cadenas

He probado de hacer un while para cada cadena, pero el resultado de la compilación es este:

Introduce una cadena: lola
Introduce una cadena: ana
Introduce una cadena: juana
La primera cadena tiene 4 caracteres.
La segunda cadena tiene 4 caracteres.
La tercera cadena tiene 4 caracteres.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.      
  6. int main(){
  7.          char cad1[100], cad2[100], cad3[100];
  8.          int longitud;
  9.          int long_cad(char[], char[], char[]);
  10.  
  11.          printf("Introduce una cadena: ");
  12.          scanf("%99s", cad1);
  13.          printf("Introduce una cadena: ");
  14.          scanf("%99s", cad2);
  15.          printf("Introduce una cadena: ");
  16.          scanf("%99s", cad3);
  17.  
  18.          longitud=long_cad(cad1, cad2, cad3);
  19.  
  20.          printf("La primera cadena tiene %d caracteres.\n", longitud);
  21.          printf("La segunda cadena tiene %d caracteres.\n", longitud);
  22.          printf("La tercera cadena tiene %d caracteres.\n", longitud);
  23. }
  24. int long_cad(char cad1[], char cad2[], char cad3[]){
  25.          int i,j,k;
  26.          i=0;
  27.          j=0;
  28.          k=0;
  29.  
  30.          while(cad1[i] != '\0'){
  31.             i++;
  32.          }
  33.          return(i);
  34.  
  35.          while(cad2[j] != '\0'){
  36.             j++;
  37.          }
  38.          return(j);
  39.  
  40.          while(cad2[k] != '\0'){
  41.             k++;
  42.          }
  43.          return(k);
  44. }

¿Por qué sólo cuenta la primera cadena?
  #8 (permalink)  
Antiguo 10/07/2010, 14:54
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: calcular la longitud de varias cadenas

porque al poner un return la funcion termina y siempre va a devolver la variable i;

Lo que no entiendo que es que quieres que haga tu funcion, si sumar las tres logitudes o que te la devuelva por separado. Podrias explicar eso.
  #9 (permalink)  
Antiguo 10/07/2010, 17:59
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: calcular la longitud de varias cadenas

mejor lee un buen libro
  #10 (permalink)  
Antiguo 11/07/2010, 05:14
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: calcular la longitud de varias cadenas

Quiero que me devuelva la longitud de cada cadena por separado.
  #11 (permalink)  
Antiguo 11/07/2010, 10:13
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: calcular la longitud de varias cadenas

pues has esto

Código C++:
Ver original
  1. int long_cad(char cad1[]){
  2.          int i=0;
  3.          while(cad1[i] != '\0')
  4.               i++;
  5.          return i;
  6. }


Y despues:

Código C++:
Ver original
  1. printf("La primera cadena tiene %d caracteres.\n", long_cad(cad1));
  2.          printf("La segunda cadena tiene %d caracteres.\n", long_cad(cad2));
  3.          printf("La tercera cadena tiene %d caracteres.\n", long_cad(cad3));
  #12 (permalink)  
Antiguo 11/07/2010, 13:08
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: calcular la longitud de varias cadenas

tal vez algo así es lo que quieres
Código C:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int *str_length(char *, char *, char *);
  5.  
  6. int main(int argc, char **argv)
  7. {
  8.     char str1[100];
  9.     char str2[100];
  10.     char str3[100];
  11.    
  12.     printf("Introduce una cadena: ");
  13.     scanf("%99s", str1);
  14.     printf("Introduce una cadena: ");
  15.     scanf("%99s", str2);
  16.     printf("Introduce una cadena: ");
  17.     scanf("%99s", str3);
  18.    
  19.     int *length = str_length(str1, str2, str3);
  20.    
  21.     printf("La primera cadena tiene %d caracteres\n", length[0]);
  22.     printf("La segunda cadena tiene %d caracteres\n", length[1]);
  23.     printf("La tercera cadena tiene %d caracteres\n", length[2]);
  24.    
  25.     free(length);
  26. }
  27.  
  28. int *str_length(char *str1, char *str2, char *str3)
  29. {
  30.     int *length = malloc(sizeof(int)*3);
  31.     length[0] = 0;
  32.     length[1] = 0;
  33.     length[2] = 0;
  34.    
  35.     while(str1[length[0]] != '\0')
  36.         length[0]++;
  37.     while(str2[length[1]] != '\0')
  38.         length[1]++;
  39.     while(str3[length[2]] != '\0')
  40.         length[2]++;
  41.    
  42.    
  43.    
  44.     return length;
  45.    
  46.    
  47. }
  #13 (permalink)  
Antiguo 12/07/2010, 04:51
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: calcular la longitud de varias cadenas

Explícame lo del puntero a la función str_lenght y puntero a las tres variables de tipo char y el puntero a la función length, por favor, es que lo de punteros lo llevo bastante mal. Gracias.

Última edición por minette1988; 12/07/2010 a las 05:17

Etiquetas: cadenas, longitud, calculadora
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 16:45.