模拟实现atoi()函数

题目: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;
}
 
 
 

猜你喜欢

转载自blog.csdn.net/lyl194458/article/details/89154576