SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: lalo_soft en Martes 5 de Junio de 2007, 01:44

Título: Conversion Sin Funcion Atoi()
Publicado por: lalo_soft en Martes 5 de Junio de 2007, 01:44
Alguien conoce un modo de convertir un numero ascii en un int sin ocupar la funcion atoi().
Título: Re: Conversion Sin Funcion Atoi()
Publicado por: Mollense en Martes 5 de Junio de 2007, 02:30
Hola campeón. Se me ocurre esto:
Código: Text
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4.  
  5. void main(void){
  6.   char *strNum;
  7.   int numero=0;
  8.   scanf("%s",strNum);
  9.   int largo=strlen(strNum);
  10.   for(int i=0;i<largo;i++){
  11.     numero+=(strNum[largo-i-1]-'0')*(pow(10,i));
  12.   }
  13.   printf("El número ingresado es: %i",numero);
  14.   getchar();
  15. }
  16.  
No se si sea la mejor manera (Evitando el uso de atoi, lógico) pero funciona...

Un saludo :beer:
Título: Re: Conversion Sin Funcion Atoi()
Publicado por: lalo_soft en Martes 5 de Junio de 2007, 04:39
Gracias angel la probre pero ocupa mas memoria :(  que atoi()
Título: Re: Conversion Sin Funcion Atoi()
Publicado por: Mollense en Martes 5 de Junio de 2007, 05:14
Cita de: "lalo_soft"
Gracias angel la probre pero ocupa mas memoria :(  que atoi()
Sip, ni hablar que sí. Veamos si alguien nos ilumina y nos muestra otra opción mas eficiente :smartass: pero supongo que atoi() ya debe estar optimizada :(
Título: Re: Conversion Sin Funcion Atoi()
Publicado por: lalo_soft en Martes 5 de Junio de 2007, 05:19
Es codigo que se instalara en un microcontrolador que solo tiene 4K de flash y con la funcion atoi() ya me quede corto.
Título: Re: Conversion Sin Funcion Atoi()
Publicado por: lalo_soft en Martes 5 de Junio de 2007, 06:16
La solucion  :D  :D  :D

Código: Text
  1.  
  2. int SetWaitTime(char *minutes)
  3. {
  4.  char totalDigit;
  5.  char index;
  6.  int totalMinutes;
  7.  char pow;
  8.  
  9.  totalDigit = strlen(minutes);
  10.  totalMinutes = 0;
  11.  pow = 1;
  12.  for(index = totalDigit;index > 0;index--)
  13.     {
  14.       minutes[index-1] &= 0x0f;
  15.       totalMinutes += minutes[index-1] * pow;
  16.       pow *= 10;
  17.     }  
  18.  return totalMinutes;
  19. }
  20.  

Nota: Esto funcionara solo con string de numeros, se puede perfeccionar para descartar los caracteres alpha pero eso esta lejos de lo que pretendia lograr y esta solucion me acomoda perfectamente y solo ocupa el 3% comparado con atoi() ,espero sirva a alguno que este en el mismo problema que estaba yo.

gracias y saludos
Título: Re: Conversion Sin Funcion Atoi()
Publicado por: fightmx en Martes 5 de Junio de 2007, 18:17
Hola lalo_soft, aún puedes ahorrarte algunas líneas de código.

 
Código: Text
  1. int my_atoi(const char *str)
  2. {
  3.     int number = 0;
  4.  
  5.     while(isdigit(*str))
  6.     {
  7.         number = 10*number + (*str++ - '0');
  8.     }
  9.     return number;
  10. }
  11.  

  Saludos.
Título: Re: Conversion Sin Funcion Atoi()
Publicado por: lalo_soft en Miércoles 6 de Junio de 2007, 00:34
Cita de: "fightmx"
Hola lalo_soft, aún puedes ahorrarte algunas líneas de código.

 
Código: Text
  1. int my_atoi(const char *str)
  2. {
  3.     int number = 0;
  4.  
  5.     while(isdigit(*str))
  6.     {
  7.         number = 10*number + (*str++ - '0');
  8.     }
  9.     return number;
  10. }
  11.  

  Saludos.

gracias fightmx :smartass:  esta mas optimisada que la mia