void tonumber(char cadena[], int cadenafinal[]){ char letras[] = "ABCDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; int numeros[100];//, cadenafinal[100]; unsigned int i, j; for(i=0; i<25; i++) numeros[i] = i; for(i=25; i<50; i++) numeros[i] = (i-25); for(i=0; i<strlen(cadena); i++) { for(j=0; j<strlen(letras); j++) { if(cadena[i] == letras[j]) cadenafinal[i] = numeros[j]; } } //return cadenafinal;}
A raiz de lo que me comentas, ¿poner char *cadena, no es lo mismo que char cadena[]?
char *clave1 = "abcd"; char clave2[] = "fgh"; // El siguiente codigo no marcara error, ya que clave1 es un apuntador a char // asi que puede apuntar a cualquier variable de tipo char clave1 = clave2; // El siguiente codigo marcara error de compilacion, pues clave2 no es un // apuntador a char, por lo tanto solo puede contener la direccion de la // cadena originalmente asignada "fgh" clave2 = clave1;
Es decir, si yo declaro:Código: Cchar *cadena = "ABCD";¿Qué significado tiene?
Por otra parte, te pongo dos versiones. ¿Son ambas correctas?
int *tonumber(char *cadena) /*Versión con punteros*/{ char letras[] = "ABCDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; int numeros[100], i, j; static int *cadenafinal; for(i=0; i<25;i++) numeros[i] = i; for(i=25; i<50;i++) numeros[i] = (i-25); for(i=0; i<strlen(cadena); i++){ for(j=0; j<strlen(letras); j++){ if(cadena[i] == letras[j]) *(cadenafinal + i) = numeros[j];}} // Regresa la direccion, no el valor return cadenafinal;}