Myatoi是实现字符串到数字的转换,遇到第一个非数字字符则转换结束,可以处理在数字前面的空格和负号
实现原理:
1.判空,确保字符串是有内容能进行判断的
2.设置符号位来对字符串的正负进行保存
3.排除数字前空格的影响
4.对字符串进行按位读取,判断数字串指针所指向的内容是否为数字,若是则进行取值,若不是则退出循环
#include<stdio.h>
#include<ctype.h>
#include<assert.h>
int Myatoi(const char* str)
{
assert(str != nullptr);//断言 对字符串进行判空操作
if (str == nullptr)
{
return 0;
}
int tmp = 0;//保存数值的变量
int flg = 1;//保存符号位
//排除空格的干扰
while (*str == ' ')
{
str++;
}
//对符号进行保存
if (*str == '-')
{
flg = -1;
str++;
}
else if(*str == '+')
{
str++;
}
//对字符串指针所指向的内容进行判断 判断其是否为数字
while (isdigit(*str))
{
tmp = tmp * 10 + (*str - '0');
str++;
}
return flg * tmp;
}
int main()
{
const char* num = " -987a45";
int n = Myatoi(num);
printf("num:%d\n", n);
}
运行结果如下:
排除数字前空格的干扰,遇到第一个非数字字符则终止读取
拓展:
对十六进制进行转换
while (isxdigit(*str))
{
if (isdigit(*str))
{
tmp = tmp * 16 + *str - '0';
}
else
{
tmp = tmp * 16 + (*str - 'a' + 10);
}
str++;
}