实现atoi

模拟实现atoi

需要考虑的情况

1.输入的字符串是否为空指针

2.是否为空字符串

3.筛选出字符串前的空格

4.判断正负号

5.是否是数字字符

6.转换数据是否溢


#include<stdio.h>
#include<windows.h>
#include<assert.h>

enum State
{
	OK
	,
	NO
};

enum State state = NO;

int my_atoi(const char *data)
{
	//符号标志位,默认是正
	int flag = 1;
	//返回值
	long long ret = 0;
	//空指针
	assert(data);
	//判断空字符串
	if (*data == '\0')
	{
		return -1;
	}
	//跳过前面的空格
	while (isspace(*data))
	{
		data++;
	}
	//负号
	if (*data == '-')
	{
		data++;
		flag = -1;
	}
	//正值
	else if (*data == '+')
	{
		data++;
	}
	while (*data)
	{
		//判断是数字字符
		if (isdigit(*data))
		{
			ret = ret * 10 + flag * (*data - '0');
			data++;
			//判断是否溢出
			if (ret > INT_MAX || ret < INT_MIN)
			{
				return ret;
			}
		}
		else
		{
			return ret;
		}
	}
	state = OK;
	return ret;
}
int main()
{
	int ret;
	ret = my_atoi("       -3214");
	if (state == OK)
		printf("%d\n", ret);
	system("pause");
	return 0;
}


猜你喜欢

转载自blog.csdn.net/QQ1910084514/article/details/80645028