/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

problema al convertir a int con atoi

 
      Índice del Foro elrincondelc.com -> Algoritmos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
kianirax



Registrado: 26 Nov 2011
Mensajes: 2

MensajePublicado: 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

MensajePublicado: 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)

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Algoritmos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com