atoi的模拟实现
atoi的介绍
Convert string to integer(把字符串转换为整型)
模拟实现需要注意的问题
//1.空指针
//2.空格字符
//3.±符号
//4.越界
//5.非数字字符
代码实现
#include<stdio.h>
#include<assert.h>
#include<ctype.h>
#include<limits.h>
enum statue
{
VALID,
INVALID
}sta=INVALID;//看返回值是否合法
int my_atoi(const char* str)
{
assert(str);
int flag = 1;//表示正数
long long sum = 0;
//如果字符串为空
if (*str == '\0')
return 0;
while (isspace(*str))//如字符串是" aaa" 跳过空格
{
str++;
}
if (*str == '+') //"+123" 判断是正数
{
flag=1;
str++;
}
else if (*str == '-')//"-123" //负数
{
flag = -1;
str++;
}
while (*str)
{
if (isdigit(*str))
{
sum = sum * 10 + (flag * (*str - '0'));
//判断是否越界
if (sum > INT_MAX || sum < INT_MIN)
{
sta = INVALID;
return 0;
}
}
else //遇见字符就返回
{
return sum;
}
str++;
}
if (*str == '\0')
{
sta = VALID; //字符串都是数字字符,并且已经读完,正常返回
}
return (int)sum;
}
int main()
{
char arr[] = "+1231231ab";
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = my_atoi(arr);
if (sta == VALID)
{
printf("合法返回:%d\n", ret);
}
else
{
printf("不合法返回:%d\n", ret);
}
return 0;
}