elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  atoi + itoa personalizadas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: atoi + itoa personalizadas  (Leído 3,199 veces)
david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
atoi + itoa personalizadas
« en: 5 Abril 2012, 21:44 pm »

MODIFICADO:


ATOI
Código
  1. /********************************************************************************************************
  2.  
  3. // By 85
  4. // boyscout_arg@hotmail.com
  5. // etalking.com.ar
  6. // David Riedel
  7. // 2013
  8.  
  9. *********************************************************************************************************/
  10.  
  11. #pragma warning (disable:4305)
  12. #pragma warning (disable:4309)
  13. #pragma warning (disable:4244)
  14. #pragma warning (disable:4018)
  15. #include <windows.h>
  16. #include <stdlib.h>
  17. #include <stdio.h>
  18.  
  19. /////
  20.  
  21. // Sin necesidad de llamadas innecesarias a funciones de CTYPE, MATH, STRING, etc
  22. // Sin necesidad de Tablas, solo un array con los números enteros que tampoco es necesario
  23. // pero no hace la gran diferencia ;-D
  24.  
  25. //////////////////////////////////////////////////
  26.  
  27. //Se requiere pasar una cadena terminada en CERO!.
  28. //Si no se le pasa una cadena terminada en CERO, la función va a buscar el
  29. //primer 0 que encuentre y puede terminar en una sección de memoria contigua
  30. //que no pertenece a la cadena pasada como parámetro.
  31. int mi_atoi(const char* str)//Respetar el tipo de parámetro (Sólo cadenas)
  32. {
  33. int len, ocurrencias =0, sig=0;
  34. for(len=0; str[len]; len++);
  35. for(int a=0; a<len;a++) if((str[a]>=48&&str[a]<=57)) ocurrencias++;
  36. if(ocurrencias==0) return 0;
  37. if((sig=str[0]=='+')||(sig=str[0]=='-')) ocurrencias+=1;
  38. if(ocurrencias<len) return 0;//Casos "11f" son 0
  39. if(len==1) return str[0]-'0';
  40. int ac=0, v1, cifras = len,m = 1;
  41. for(int x=0;x<((cifras-1)-sig);x++) m*=10;
  42. for(int i=sig;i<cifras;i++){//Factoriza y acumula
  43. v1=str[i]-'0';
  44. v1*=m;
  45. ac=(v1==0?ac+0:ac+v1);
  46. m/=10;
  47. }
  48. if(str[0]=='-') ac*=-1;
  49. return ac;
  50. }
  51.  
  52. ////////////////////
  53.  
  54. int main(){
  55.  
  56. // char str = 'B';
  57. // int entero = mi_atoi(&str);
  58.  
  59. // char* str = "asdasd\0";
  60. // int entero = mi_atoi(str);
  61.  
  62. // char* str = "8a3\0";
  63. // int entero = mi_atoi(str);
  64.  
  65. // char* str = "83312321\0";
  66. // int entero = mi_atoi(str);
  67.  
  68. // char* str = "000000099\0";
  69. // int entero = mi_atoi(str);
  70.  
  71. // char* str = "9\0";
  72. // int entero = mi_atoi(str);
  73.  
  74. // char* str = "20\0";
  75. // int entero = mi_atoi(str);
  76.  
  77. // char* str = "500\0";
  78. // int entero = mi_atoi(str);
  79.  
  80. // char* str = "+500\0";
  81. // int entero = mi_atoi(str);
  82.  
  83. // char* str = "0500\0";
  84. // int entero = mi_atoi(str);
  85.  
  86. // char* str = "0\0";
  87. // int entero = mi_atoi(str);
  88.  
  89. // char* str = "10f\0";
  90. // int entero = mi_atoi(str);
  91.  
  92. // char* str = "01ff\0";
  93. // int entero = mi_atoi(str);
  94.  
  95. // char* str = "0f\0";
  96. // int entero = mi_atoi(str);
  97.  
  98. // char* str = "+12\0";
  99. // int entero = mi_atoi(str);
  100.  
  101. // char* str = "+12\0";
  102. // int entero = mi_atoi(str);
  103.  
  104. // char* str = "03232\0";
  105. // int entero = mi_atoi(str);
  106.  
  107. // printf("%d", entero);
  108.  
  109.  
  110. printf("%d\n",mi_atoi("-110"));
  111. printf("%d\n",mi_atoi("-10"));
  112. printf("%d\n",mi_atoi("0"));
  113. printf("%d\n",mi_atoi("1"));
  114. printf("%d\n",mi_atoi("-1"));
  115. printf("%d\n",mi_atoi("-11"));
  116. printf("%d\n",mi_atoi("-2"));
  117. printf("%d\n",mi_atoi("-200"));
  118. printf("%d\n",mi_atoi("-220"));
  119. printf("%d\n",mi_atoi("+0"));
  120. printf("%d\n",mi_atoi("-0"));
  121. printf("%d\n",mi_atoi("+1"));
  122. printf("%d\n",mi_atoi("+33"));
  123. printf("%d\n",mi_atoi("-330"));
  124. printf("%d\n",mi_atoi("-3000"));
  125. // printf("%d\n",mi_atoi("-1"));
  126. // printf("%d\n",mi_atoi("-200"));
  127. // printf("%d\n",mi_atoi("-220"));
  128. printf("%d\n",mi_atoi("+12"));
  129.  
  130. printf("\n");
  131. system("pause");
  132. return 0;
  133. }
  134.  

ITOA
Código
  1. /********************************************************************************************************
  2.  
  3. // By 85
  4. // boyscout_arg@hotmail.com
  5. // etalking.com.ar
  6. // David Riedel
  7. // 2013
  8.  
  9. *********************************************************************************************************/
  10.  
  11. #pragma warning (disable:4305)
  12. #pragma warning (disable:4309)
  13. #pragma warning (disable:4244)
  14. #pragma warning (disable:4018)
  15. #include <windows.h>
  16. #include <stdlib.h>
  17. #include <stdio.h>
  18.  
  19. /////
  20.  
  21. // Sin necesidad de llamadas innecesarias a funciones de CTYPE, MATH, STRING, etc
  22. // Sin necesidad de Tablas, sólo un array con los números enteros que tampoco es necesario
  23. // pero no hace la gran diferencia ;-D
  24.  
  25. //////////////////////////////////////////////////
  26.  
  27. char* mi_itoa(int num, char* str)
  28. {
  29. int sig = -1;
  30. if(num<0){
  31. num*=-1;
  32. if(num<10){
  33. str[0]='-'; str[1]='0'+num; str[2]=0; return str;
  34. } else {
  35. sig=1;
  36. }
  37. }
  38. else if(num==0){
  39. str[0]='0'; str[1]=0; return str;
  40. } else {
  41. if(num<10){
  42. str[0]='0'+num; str[1]=0; return str;
  43. } else {
  44. sig=0;
  45. }
  46. }
  47. if(sig!=-1){
  48. int copia= num, m = 1, cifras = 1;
  49. for(;copia>=10;copia/=10) cifras++;
  50. for(int x=0;x<(cifras-1);x++) m*=10;
  51. float v1=num;
  52. int v2=0, v3=num;
  53. if(sig) str[0]='-';
  54. for(int i=0; i<cifras; i++){//Descompone en factores
  55. v1/=m;
  56. v2=(int)v1*m;
  57. v3-=v2;
  58. m/=10;
  59. str[i+sig]=48+(int)v1;
  60. v1=v3;
  61. }
  62. str[i+sig]=0;//Si str está a 0 no es necesario..
  63. }
  64. return str;
  65. }
  66.  
  67. ///////////////////
  68.  
  69. int main(){
  70.  
  71.  
  72. char str[256];
  73.  
  74. // mi_itoa(321312,str);
  75. // printf(str);
  76.  
  77. // itoa(02321,str,10);
  78. // printf(str);
  79.  
  80. // mi_itoa(02321,str);
  81. // printf(str);
  82.  
  83. // mi_itoa(-12321,str);
  84. // printf(str);
  85.  
  86. // itoa(-012321,str,10);
  87. // printf(str);
  88.  
  89. // mi_itoa(-012321,str,10);
  90. // printf(str);
  91.  
  92. // mi_itoa(555,str);
  93. // printf(str);
  94.  
  95. // mi_itoa(0,str);
  96. // printf(str);
  97.  
  98. // mi_itoa(1,str);
  99. // printf(str);
  100.  
  101. // mi_itoa(500,str);
  102. // printf(str);
  103.  
  104. printf(mi_itoa(+321312,str));printf("\n");
  105. printf(mi_itoa(-321312,str));printf("\n");
  106. printf(mi_itoa(321312,str));printf("\n");
  107. printf(mi_itoa(+0,str));printf("\n");
  108. printf(mi_itoa(0,str));printf("\n");
  109. printf(mi_itoa(-0,str));printf("\n");
  110. printf(mi_itoa(+1,str));printf("\n");
  111. printf(mi_itoa(1,str));printf("\n");
  112. printf(mi_itoa(-1,str));printf("\n");
  113. printf(mi_itoa(10,str));printf("\n");
  114. printf(mi_itoa(+10,str));printf("\n");
  115. printf(mi_itoa(-10,str));printf("\n");
  116. printf(mi_itoa(-110,str));printf("\n");
  117. printf(mi_itoa(-100,str));printf("\n");
  118.  
  119. printf(mi_itoa(-5000,str));printf("\n");
  120. printf(mi_itoa(-55555,str));printf("\n");
  121. printf(mi_itoa(550,str));printf("\n");
  122. printf(mi_itoa(500,str));printf("\n");
  123. printf(mi_itoa(+330,str));printf("\n");
  124.  
  125. printf(mi_itoa(-000,str));printf("\n");
  126. printf(mi_itoa(+000,str));printf("\n");
  127. // printf(mi_itoa(+00009,str));printf("\n");
  128. printf(mi_itoa(+109,str));printf("\n");
  129. printf(mi_itoa(-109,str));printf("\n");
  130. // printf(mi_itoa(-09,str));printf("\n");
  131. // printf(mi_itoa(+09,str));printf("\n");
  132. printf(mi_itoa(-999,str));printf("\n");
  133. // printf(mi_itoa(-00000999,str));printf("\n");
  134.  
  135. printf("\n");
  136. system("pause");
  137. return 0;
  138. }
  139.  
  140. /////
  141.  
  142.  


« Última modificación: 5 Marzo 2013, 00:15 am por david_BS » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: atoi + itoa personalizadas
« Respuesta #1 en: 7 Abril 2012, 07:17 am »

ammm...

Código
  1.  
  2. #include<iostream>
  3.  
  4. using namespace std;
  5.  
  6. int atoi(char* string);
  7. double atof(char* string);
  8. unsigned int strlen(char* string);
  9. void itoa( char* string, int n);
  10. void reverse(char* string);
  11.  
  12. int main()
  13. {
  14.    char* c = (char*)"  -154.456";
  15.    double val;
  16.    cout << (val=atof(c)) << endl;
  17.    itoa(c,val);
  18.    cout << c << endl;
  19.    cin.get();
  20.    return 1;
  21. }
  22.  
  23. unsigned int strlen(char* string)
  24. {   //  By BlackZeroX ( http://Infrangelux.sytes.net/ )
  25.    unsigned int i=0;
  26.    while (*(string++) != '\0') i++;
  27.    return i;
  28. }
  29. void reverse(char* string)
  30. {   //  By BlackZeroX ( http://Infrangelux.sytes.net/ )
  31.    char c;
  32.    unsigned long int i;
  33.    unsigned long int j;
  34.    for ( i=0, j=strlen(string)-1; i <j; i++,j-- )
  35.    {
  36.        c=string[i];
  37.        string[i]=string[j];
  38.        string[j]=c;
  39.    }
  40. }
  41. int atoi(char* string)
  42. {   //  By BlackZeroX ( http://Infrangelux.sytes.net/ )
  43.    return (int)atof(string);
  44. }
  45. double  atof(char* string)
  46. {   //  By BlackZeroX ( http://Infrangelux.sytes.net/ )
  47.    double n, p;
  48.    int i, s;
  49.  
  50.    for ( i=0; string[i]==' ' || string[i]=='\n' || string[i]=='\t'; i++ );
  51.  
  52.    if ( string[i]=='+' || string[i]=='-' )
  53.        s=(string[i++]=='+') ? 1:-1;
  54.    else
  55.        s=1;
  56.    for ( n=0 ; string[i]>='0' && string[i]<='9'; i++ )
  57.        n = 10*n+string[i]-'0';
  58.  
  59.    if (string[i]=='.')
  60.        i++;
  61.    for ( p=1 ; string[i]>='0' && string[i]<='9'; i++ )
  62.    {
  63.        n = 10*n+string[i]-'0';
  64.        p *= 10;
  65.    }
  66.    return s * n / p;
  67. }
  68.  
  69. void itoa( char* string, int n)
  70. {   //  By BlackZeroX ( http://Infrangelux.sytes.net/ )
  71.    int i,s;
  72.    if ((s=n)<0)
  73.        n = -n;
  74.    i=0;
  75.    do
  76.    {
  77.        string[i++]= n % 10 + '0';
  78.    } while ((n /= 10)>0);
  79.    if (s<0)
  80.        string[i++]='-';
  81.    string[i]='\0';
  82.    reverse(string);
  83. }
  84.  
  85.  

Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: atoi + itoa personalizadas
« Respuesta #2 en: 7 Abril 2012, 10:40 am »

muy bueno XD
ahora que veo que pusiste la opción para números negativos, yo solamente estaba preocupado por los binarios para un convertidor a binario. en otro momento voy a hacer lo de los negativos porque estaría bueno que ingreses un entero negativo y lo convierta a string con signo y todo
« Última modificación: 7 Abril 2012, 10:48 am por david_BS » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
funcion ITOA
Programación C/C++
mapers 1 4,993 Último mensaje 27 Diciembre 2010, 06:18 am
por [L]ord [R]NA
Convertir matriz Char a Int con atoi
Programación C/C++
jfap45 5 5,974 Último mensaje 9 Agosto 2012, 02:46 am
por BlackZeroX
ATOI + ITOA remake « 1 2 »
Programación C/C++
85 12 9,877 Último mensaje 27 Febrero 2013, 19:45 pm
por rir3760
¿Algoritmo alterno a itoa?
Programación C/C++
AlbertoBSD 4 2,718 Último mensaje 15 Mayo 2016, 05:36 am
por AlbertoBSD
Duda con la función atoi()
Programación C/C++
Locura_23 3 3,392 Último mensaje 9 Mayo 2021, 23:05 pm
por Locura_23
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines