题目:atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。
总体思路:123等于1*10+2=12,12*10+3=123.(当然也可以统计出位数,然后用每一位数字与其权值相乘,最后将所有的相加)
注意:
(1):会跳过前面的空白字符(如空格、换行、TAB等,即isspace()的字符),
直到遇到数字字符才开始转换,遇到非数字字符或者\0结束转换,但是如果前面第一个字符既不是这些空白字符,
也不是数字字符,就返回0
(2):当越界时输出有符号整数能表示的最大数/最小数(INT_MAX/-INT_MAX,即21以多点)
(3):注意数字的正负判断
(4):注意空串,指针为空的情况
int my_atoi(const char* str)
{
assert(str);//不能为空指针
long long ret = 0;//处理溢出情况的数据存储
int flag = 1;//默认为正数
while (isspace(*str))//跳过"空字符"
{
str++;
}
if (*str == '+' || *str == '-')
{
if (*str == '-')//负数的话将标志位flag置-1
{
flag = -1;
}
str++;
}
//正式开始解析
while (isdigit(*str))//只有是数字字符才进来(遇到\0返回0,即也不会进来)
{
ret = ret * 10 + (*str - '0');
if (flag == 1)//判断正溢出
{
if (ret > INT_MAX)
{
return INT_MAX;
}
}
else//判断负溢出
{
if (-ret < INT_MIN)
{
return INT_MIN;
}
}
str++;
}
return (int)ret*flag;
}