模拟实现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;
}