1、函数功能介绍
2、该函数对一些特殊情况的处理
3、模拟实现
4、完整代码
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
enum State
{
VALID,
INVALID
}sta = INVALID;//默认设置为非法
int my_atoi(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 * (*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[] = "a12a34";
int ret = my_atoi(arr);
if (sta == VALID)
printf("合法值:%d", ret);
else
printf("非法值:%d", ret);
return 0;
}