• Viernes 26 de Abril de 2024, 22:37

Autor Tema:  Conversion Sin Funcion Atoi()  (Leído 2120 veces)

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Conversion Sin Funcion Atoi()
« en: Martes 5 de Junio de 2007, 01:44 »
0
Alguien conoce un modo de convertir un numero ascii en un int sin ocupar la funcion atoi().

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Conversion Sin Funcion Atoi()
« Respuesta #1 en: Martes 5 de Junio de 2007, 02:30 »
0
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:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Conversion Sin Funcion Atoi()
« Respuesta #2 en: Martes 5 de Junio de 2007, 04:39 »
0
Gracias angel la probre pero ocupa mas memoria :(  que atoi()

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Conversion Sin Funcion Atoi()
« Respuesta #3 en: Martes 5 de Junio de 2007, 05:14 »
0
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 :(
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Conversion Sin Funcion Atoi()
« Respuesta #4 en: Martes 5 de Junio de 2007, 05:19 »
0
Es codigo que se instalara en un microcontrolador que solo tiene 4K de flash y con la funcion atoi() ya me quede corto.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Conversion Sin Funcion Atoi()
« Respuesta #5 en: Martes 5 de Junio de 2007, 06:16 »
0
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

fightmx

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Conversion Sin Funcion Atoi()
« Respuesta #6 en: Martes 5 de Junio de 2007, 18:17 »
0
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.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Conversion Sin Funcion Atoi()
« Respuesta #7 en: Miércoles 6 de Junio de 2007, 00:34 »
0
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