#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<limits.h>
int my_hex(const int*sp)
{
int sum=0;
while(isdigit(*sp))
{
int x=0;
if(isdigit(*sp)
{
x=*sp-'0';
}
else
{
char c=tolower(*sp);
x=c-'a';
}
sum=sum*16+x;
++sp;
}
return sum;
}
int my_oct(int *sp)
{
int sum=0;
while(isdigit(*sp)&&*sp!='8'&&*sp!='9')
{
sum=sum*8+*sp-'0';
++sp;
}
return sum;
}
int my_atoi(const char*sp)
{
int sum=0;
if(sp==nullptr) return sum;
int tag=0;
while(isspace(*sp))++sp;
if(*sp=='-')
{
tag=1;
++sp;
}
if(*sp=='+')
{
tag=0;
++sp;
}
if(*sp=='0')
{
if((*(sp+1))=='x'||(*(sp+1))=='X')
{
sum=my_hex(sp+2);
}
else
{
sum=my_oct(sp+1);
}
}
if(tag)
{
sum=-sum;
}
return sum;
int main()
{
const char* str[]={"12321",
"0123",
"0x2a4f",
" -232",
" +234 234",
"24323.344",
"111112111",
"22222222222",
"33333333333333"
};
int n=sizeof(str)/sizeof(str[0]);
for(int i=0;i<n;++1)
{
printf("%s==>%d",str[i],my_atoi(str[i]));
}
return 0;
}