首页 > 编程知识 正文

c atoi实现,c语言atoi函数源代码

时间:2023-05-04 04:14:46 阅读:221179 作者:939

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)-''-48)>=0 && ((*str)-''-48)<=9)

{

number = 10*number + ((*str)-''-48);

str++;

}

return flag*number;

}

升级版:atoi函数输入为字符串与进制数(2-16),返回数字

// 对单个字符返回数字

int check_number(char str, unsigned int digit)

{

int number = -1;

if(digit>10)

{

if(((str)-''-48)>=0 && ((str)-''-48)<=9) //处理1到9

{

number = (str)-''-48;

}

else if(((str)-'')>=65 && ((str)-'')<=65+(digit-11))//处理A到F

{

number = (str)-''-55;

}

else if(((str)-'')>=97 && ((str)-'')<=97+(digit-11))//处理a到f

{

number = (str)-''-87;

}

}

else

{

if(((str)-'')>=48 && ((str)-'')<=48+(digit-1)) //处理1到9

{

number =(str)-''-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;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。