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

Una mano con esta funcion.

Estas en el tema de Una mano con esta funcion. en el foro de C/C++ en Foros del Web. La funcion consiste en tomar 2 cadenas calcular el numero de caracteres de las dos y retornar un puntero a la cadena con mayor numero ...
  #1 (permalink)  
Antiguo 26/09/2010, 15:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Una mano con esta funcion.

La funcion consiste en tomar 2 cadenas calcular el numero de caracteres de las dos y retornar un puntero a la cadena con mayor numero de caracteres.
el problema es que cuando intento usar la función de esta manera por ejemplo:

char *cadena1 = "texto1";
char *cadena2 = "textoprueba";
cadena = cadena2 = malloc(128*sizeof(char));

printf("%s ", stringLen(cadena1,cadena2,128,128));

me da error fatal, ahora si por ejemplo cambio el printf por este:

printf("%c", stringLen(cadena1,cadena2,128,128));

me imprime el primer caracter de la cadena mas larga en este caso imprimiria
"t" de "textoprueba".

Como hago para solucionar que me imprima la cadena completa..?

Código C:
Ver original
  1. char stringLen(const char *string1, const char *string2, int len, int len2)
  2. {
  3.     short i=0,c=0, c2=0;
  4.     while (*(string1++) != '\0' && i<len)
  5.     {
  6.         c++;
  7.         i++;
  8.     }
  9.     i=0;
  10.     while (*(string2++) != '\0' && i<len2)
  11.     {
  12.         c2++;
  13.         i++;
  14.     }
  15.     string1 -= (c+1);
  16.     string2 -= (c2+1);
  17.     if (c>c2)
  18.         return *string1;
  19.     else
  20.         return *string2;   
  21. }
  #2 (permalink)  
Antiguo 26/09/2010, 18:27
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Una mano con esta funcion.

Si te fijas tu funcion devuelve un caracter y no un puntero a la cadena. Asi quedaria:

Código C++:
Ver original
  1. char * stringLen(const char *string1, const char *string2, int len, int len2)
  2. {
  3.     short i=0,c=0, c2=0;
  4.     while (*(string1++) != '\0' && i<len)
  5.     {
  6.         c++;
  7.         i++;
  8.     }
  9.     i=0;
  10.     while (*(string2++) != '\0' && i<len2)
  11.     {
  12.         c2++;
  13.         i++;
  14.     }
  15.     string1 -= (c+1);
  16.     string2 -= (c2+1);
  17.     if (c>c2)
  18.         return string1;
  19.     else
  20.         return string2;    
  21. }
  #3 (permalink)  
Antiguo 26/09/2010, 20:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Una mano con esta funcion.

Si lo se, y ya lo intente de esa manera y me lanza un warning
[Warning] return makes integer from pointer without a cast .

ademas cuando lo ejecuto en vez de mostrarme la cadena me muestra : (null)
  #4 (permalink)  
Antiguo 27/09/2010, 12:48
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Una mano con esta funcion.

Mmmm ya encontre el error de logica D:, lo posteo por si alguien lo necesita:

Código C:
Ver original
  1. int stringLen(const char *string1, const char *string2)
  2. {
  3.     short c=0, c2=0;
  4.     while (*(string1++) != '\0')
  5.     {
  6.         c++;
  7.     }
  8.     while (*(string2++) != '\0')
  9.     {
  10.         c2++;
  11.     }
  12.     string1 -= (c+1);
  13.     string2 -= (c2+1);
  14.     (c>c2) ? (int)string1 : (int)string2;      
  15. }
:-p
  #5 (permalink)  
Antiguo 27/09/2010, 12:57
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Una mano con esta funcion.

No me di cuenta que vos modificabas el puntero que lleva el string, llevandolo hasta el final.
Lo que no se si te hace falta es castearlo a entero.

Etiquetas: funcion, mano
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 11:05.