
这个函数的功能是将字符串转换为整形,那么具体是怎么样的呢
先看几个例子:



 
 
 
 因此,我们模拟实现时,要考虑以上几种非法输入情况:
1.空字符串
2.空白字符
3.处理+-号
4.过大值过小值
5.数字中间有其他字符
atoi模拟实现:
#include <stdio.h>
#include <ctype.h>
#include <assert.h>
#include <stdlib.h>
enum State
{
	VALID,
	INVALID
}sta = INVALID;//默认设置为非法
int my_atoi(const char* str)
{
	//空指针
	assert(str);
	//空字符串
	if (*str == '\0')
		return 0;
	//跳过空白字符
	while (isspace(*str))
	{
		str++;
	}
	//处理+-
	int flag = 1;
	if (*str == '+')
	{
		flag = 1;
		str++;
	}
	else if(*str == '-')
	{
		flag = -1;
		str++;
	}
	long long r = 0;
	while (*str)
	{
		if(isdigit(*str))
		{
			r = r * 10 + flag*((long long)*str - '0');
			if (r > INT_MAX || r < INT_MIN)
			{
				if (flag == 1)
					return INT_MAX;
				else
					return INT_MIN;
			}
			str++;
		}
		else
		{
			return (int)r;
		}
	}
	sta = VALID;
	return (int)r;
}
int main()
{
	char arr[] = "   12ab34";//加几个空格
	int ret = my_atoi(arr);
	if (sta == VALID)
		printf("合法的转换:%d\n", ret);
	else
		printf("非法的转换:%d\n", ret);
	return 0;
} 
 
                

















