| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
kianirax
Registrado: 26 Nov 2011 Mensajes: 2
| Publicado: 03/11/2012 4:17 pm | | | Título: problema al convertir a int con atoi |
| Hola, estoy haciendo un programa y tengo una funcion que debe comparar dos numeros y ver cual es mayor... pero en este caso, los numeros vienen en char..... y yo quiero poder compararlos como int , pero solo tengo que considerar hasta el penultimo caracter para tranformarlo a int.... me explico... tengo dos char.... ej: '12345' '5647891' y yo quisiera compararlos como numeros, solo hasta el penultimo caracter.... osea, tomaria para comparar solamente 1234 y 564789 y de ahi saco el mayor.... lo que yo estaba tratando de hacer, era tener otro char auxiliar y luego ir copiando caracter a caracter (desde el numero al aux) hasta el largo -1 y asi segun yo se copiarian solo los primeros numeros y luego ocupo atoi y los comparo.... pero no me funcionaaa -!! ayuda :/
aca dejo el codigo
EDITO!!! muchas gracias al que respondio, eso que dices funciona jeje.... pero ademas se me habia olvidado un detalle..... debo tener en cuenta, que el ULTIMO caracter, puede ser una letra o numero.... osea puede ser el char 23456a , ahi solo deberia tomar el 23456 Perdon las molestias
| Código: | #include<stdio.h> #include<string.h> #include<stdlib.h>
int transformar_comparar(char num1[], char num2[]); main(){
char buffer1[10],buffer2[10],*n1,*n2; int res=0;
printf("ingrese numero"); scanf("%s",buffer1);
printf("ingrese numero"); scanf("%s",buffer2);
n1=(char*)malloc(sizeof(char)* strlen(buffer1)); n2=(char*)malloc(sizeof(char) * strlen(buffer2)); strcpy(n1,buffer1); strcpy(n2,buffer2); res=transformar_comparar(n1,n2); printf("\n%d",res);
}
int transformar_comparar(char num1[], char num2[]){ //2 menor que 1 char *buffer1, *buffer2; int largo=0,i=0;
largo=strlen(num1); largo=largo-1; buffer1=(char*)malloc(sizeof(char)*largo);
while(i!=largo){ buffer1[i]=num1[i]; i++; }
largo=strlen(num2); largo=largo-1; buffer2=(char*)malloc(sizeof(char)*largo);
while(i!=largo){ buffer2[i]=num2[i]; i++; }
if(atoi(buffer2)<atoi(buffer1)) return 0; else return 1; }
|
Ultima edición por kianirax el 03/11/2012 7:29 pm; editado 2 veces |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7516 Ubicación: Mexico
| Publicado: 03/11/2012 5:11 pm | | | Título: |
| Si no quieres el dígito menos significativo de cada numero basta con utilizar atoi y dividir entre diez:
| Código: | int transformar_comparar(char num1[], char num2[]) { if (atoi(buffer2) / 10 < atoi(buffer1) / 10) return 0; else return 1; } |
Mas todavía, los operadores relacionales como "<", ">=", etc. resultan en el valor uno si se cumple la condición, cero en caso contrario. En base a ello la función se reduce a:
| Código: | int transformar_comparar(char a[], char b[]) { return atoi(a)/10 <= atoi(b)/10; } |
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
| | Volver arriba | |  | cheroky
Registrado: 22 Sep 2005 Mensajes: 2556 Ubicación: Valladolid (España)
| Publicado: 24/11/2012 8:02 pm | | | Título: |
| Hola.
| kianirax escribió: | EDITO!!! muchas gracias al que respondio, eso que dices funciona jeje.... pero ademas se me habia olvidado un detalle..... debo tener en cuenta, que el ULTIMO caracter, puede ser una letra o numero.... osea puede ser el char 23456a , ahi solo deberia tomar el 23456 Perdon las molestias |
Es mejor que publiques un nuevo mensaje, sino posiblemente nadie revisará el hilo.
En ese caso basta con eliminar el "ultimo" elemento del array de caracteres, esto es posible ya que los parámetros formales son de lectura y escritura......
| Código: | int trans_cmp(char* a, char* b) { a[strlen(a) - 1] = b[strlen(b) - 1] = '\0';
return atoi(a) <= atoi(b); } |
·?0ƒ· _________________ La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |