atoi函数:把字符串转换为数字(int型)
int atoi_my(char *str)
{
int flag = 1;
int number = 0;
//判断是否为空
if(str == NULL)
{
return 0;
}
//如果前面有连续空格,跳过
while(*str==' ')
{
str++;
}
//若有负号,则负数标志位置1
if(*str=='-')
{
flag = -1;
}
//跳过符号位
if(*str == '+' ||*str == '-')
{
str++;
}
//判断单个字符是否满足变换为数字
while(((*str)-'\0'-48)>=0 && ((*str)-'\0'-48)<=9)
{
number = 10*number + ((*str)-'\0'-48);
str++;
}
return flag*number;
}
升级版:atoi函数输入为字符串与进制数(2-16),返回数字
// 对单个字符返回数字
int check_number(char str, unsigned int digit)
{
int number = -1;
if(digit>10)
{
if(((str)-'\0'-48)>=0 && ((str)-'\0'-48)<=9) //处理1到9
{
number = (str)-'\0'-48;
}
else if(((str)-'\0')>=65 && ((str)-'\0')<=65+(digit-11))//处理A到F
{
number = (str)-'\0'-55;
}
else if(((str)-'\0')>=97 && ((str)-'\0')<=97+(digit-11))//处理a到f
{
number = (str)-'\0'-87;
}
}
else
{
if(((str)-'\0')>=48 && ((str)-'\0')<=48+(digit-1)) //处理1到9
{
number =(str)-'\0'-48;
}
}
return number;
}
int atoi_my2(char *str,unsigned int digit)
{
int flag = 1;
int number = 0;
int num=-1;
//判断是否为空
if(str == NULL)
{
return 0;
}
//如果前面有连续空格,跳过
while(*str==' ')
{
str++;
}
//若有负号,则负数标志位置1
if(*str=='-')
{
flag = -1;
}
//跳过符号位
if(*str == '+' ||*str == '-')
{
str++;
}
//判断单个字符是否满足变换为数字
while(-1 != (num=check_number(*str, digit)))
{
number = digit*number + num;
str++;
}
return flag*number;
}