MODIFICADO:
ATOI
ITOA
ATOI
Código (cpp) [Seleccionar]
/********************************************************************************************************
// By 85
// boyscout_arg@hotmail.com
// etalking.com.ar
// David Riedel
// 2013
*********************************************************************************************************/
#pragma warning (disable:4305)
#pragma warning (disable:4309)
#pragma warning (disable:4244)
#pragma warning (disable:4018)
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
/////
// Sin necesidad de llamadas innecesarias a funciones de CTYPE, MATH, STRING, etc
// Sin necesidad de Tablas, solo un array con los números enteros que tampoco es necesario
// pero no hace la gran diferencia ;-D
//////////////////////////////////////////////////
//Se requiere pasar una cadena terminada en CERO!.
//Si no se le pasa una cadena terminada en CERO, la función va a buscar el
//primer 0 que encuentre y puede terminar en una sección de memoria contigua
//que no pertenece a la cadena pasada como parámetro.
int mi_atoi(const char* str)//Respetar el tipo de parámetro (Sólo cadenas)
{
int len, ocurrencias =0, sig=0;
for(len=0; str[len]; len++);
for(int a=0; a<len;a++) if((str[a]>=48&&str[a]<=57)) ocurrencias++;
if(ocurrencias==0) return 0;
if((sig=str[0]=='+')||(sig=str[0]=='-')) ocurrencias+=1;
if(ocurrencias<len) return 0;//Casos "11f" son 0
if(len==1) return str[0]-'0';
int ac=0, v1, cifras = len,m = 1;
for(int x=0;x<((cifras-1)-sig);x++) m*=10;
for(int i=sig;i<cifras;i++){//Factoriza y acumula
v1=str[i]-'0';
v1*=m;
ac=(v1==0?ac+0:ac+v1);
m/=10;
}
if(str[0]=='-') ac*=-1;
return ac;
}
////////////////////
int main(){
// char str = 'B';
// int entero = mi_atoi(&str);
// char* str = "asdasd\0";
// int entero = mi_atoi(str);
// char* str = "8a3\0";
// int entero = mi_atoi(str);
// char* str = "83312321\0";
// int entero = mi_atoi(str);
// char* str = "000000099\0";
// int entero = mi_atoi(str);
// char* str = "9\0";
// int entero = mi_atoi(str);
// char* str = "20\0";
// int entero = mi_atoi(str);
// char* str = "500\0";
// int entero = mi_atoi(str);
// char* str = "+500\0";
// int entero = mi_atoi(str);
// char* str = "0500\0";
// int entero = mi_atoi(str);
// char* str = "0\0";
// int entero = mi_atoi(str);
// char* str = "10f\0";
// int entero = mi_atoi(str);
// char* str = "01ff\0";
// int entero = mi_atoi(str);
// char* str = "0f\0";
// int entero = mi_atoi(str);
// char* str = "+12\0";
// int entero = mi_atoi(str);
// char* str = "+12\0";
// int entero = mi_atoi(str);
// char* str = "03232\0";
// int entero = mi_atoi(str);
// printf("%d", entero);
printf("%d\n",mi_atoi("-110"));
printf("%d\n",mi_atoi("-10"));
printf("%d\n",mi_atoi("0"));
printf("%d\n",mi_atoi("1"));
printf("%d\n",mi_atoi("-1"));
printf("%d\n",mi_atoi("-11"));
printf("%d\n",mi_atoi("-2"));
printf("%d\n",mi_atoi("-200"));
printf("%d\n",mi_atoi("-220"));
printf("%d\n",mi_atoi("+0"));
printf("%d\n",mi_atoi("-0"));
printf("%d\n",mi_atoi("+1"));
printf("%d\n",mi_atoi("+33"));
printf("%d\n",mi_atoi("-330"));
printf("%d\n",mi_atoi("-3000"));
// printf("%d\n",mi_atoi("-1"));
// printf("%d\n",mi_atoi("-200"));
// printf("%d\n",mi_atoi("-220"));
printf("%d\n",mi_atoi("+12"));
printf("\n");
system("pause");
return 0;
}
ITOA
Código (cpp) [Seleccionar]
/********************************************************************************************************
// By 85
// boyscout_arg@hotmail.com
// etalking.com.ar
// David Riedel
// 2013
*********************************************************************************************************/
#pragma warning (disable:4305)
#pragma warning (disable:4309)
#pragma warning (disable:4244)
#pragma warning (disable:4018)
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
/////
// Sin necesidad de llamadas innecesarias a funciones de CTYPE, MATH, STRING, etc
// Sin necesidad de Tablas, sólo un array con los números enteros que tampoco es necesario
// pero no hace la gran diferencia ;-D
//////////////////////////////////////////////////
char* mi_itoa(int num, char* str)
{
int sig = -1;
if(num<0){
num*=-1;
if(num<10){
str[0]='-'; str[1]='0'+num; str[2]=0; return str;
} else {
sig=1;
}
}
else if(num==0){
str[0]='0'; str[1]=0; return str;
} else {
if(num<10){
str[0]='0'+num; str[1]=0; return str;
} else {
sig=0;
}
}
if(sig!=-1){
int copia= num, m = 1, cifras = 1;
for(;copia>=10;copia/=10) cifras++;
for(int x=0;x<(cifras-1);x++) m*=10;
float v1=num;
int v2=0, v3=num;
if(sig) str[0]='-';
for(int i=0; i<cifras; i++){//Descompone en factores
v1/=m;
v2=(int)v1*m;
v3-=v2;
m/=10;
str[i+sig]=48+(int)v1;
v1=v3;
}
str[i+sig]=0;//Si str está a 0 no es necesario..
}
return str;
}
///////////////////
int main(){
char str[256];
// mi_itoa(321312,str);
// printf(str);
// itoa(02321,str,10);
// printf(str);
// mi_itoa(02321,str);
// printf(str);
// mi_itoa(-12321,str);
// printf(str);
// itoa(-012321,str,10);
// printf(str);
// mi_itoa(-012321,str,10);
// printf(str);
// mi_itoa(555,str);
// printf(str);
// mi_itoa(0,str);
// printf(str);
// mi_itoa(1,str);
// printf(str);
// mi_itoa(500,str);
// printf(str);
printf(mi_itoa(+321312,str));printf("\n");
printf(mi_itoa(-321312,str));printf("\n");
printf(mi_itoa(321312,str));printf("\n");
printf(mi_itoa(+0,str));printf("\n");
printf(mi_itoa(0,str));printf("\n");
printf(mi_itoa(-0,str));printf("\n");
printf(mi_itoa(+1,str));printf("\n");
printf(mi_itoa(1,str));printf("\n");
printf(mi_itoa(-1,str));printf("\n");
printf(mi_itoa(10,str));printf("\n");
printf(mi_itoa(+10,str));printf("\n");
printf(mi_itoa(-10,str));printf("\n");
printf(mi_itoa(-110,str));printf("\n");
printf(mi_itoa(-100,str));printf("\n");
printf(mi_itoa(-5000,str));printf("\n");
printf(mi_itoa(-55555,str));printf("\n");
printf(mi_itoa(550,str));printf("\n");
printf(mi_itoa(500,str));printf("\n");
printf(mi_itoa(+330,str));printf("\n");
printf(mi_itoa(-000,str));printf("\n");
printf(mi_itoa(+000,str));printf("\n");
// printf(mi_itoa(+00009,str));printf("\n");
printf(mi_itoa(+109,str));printf("\n");
printf(mi_itoa(-109,str));printf("\n");
// printf(mi_itoa(-09,str));printf("\n");
// printf(mi_itoa(+09,str));printf("\n");
printf(mi_itoa(-999,str));printf("\n");
// printf(mi_itoa(-00000999,str));printf("\n");
printf("\n");
system("pause");
return 0;
}
/////