#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<ctype.h>
//考虑到以下几点:
//NULL
//空字符串
//+-
//溢出
enum Status
{
VALID,//合法
INVALID//非法
};
enum Status status = INVALID;
int my_atoi(const char *str)
{
int flag = -1;
long long ret = 0;
assert(str != NULL);
if (*str == '\0')
{
return 0;
}
//空白字符
while (isspace(*str))
{
str++;
}
//+-
if (*str == '-')
{
flag = -1;
str++;
}
if (*str == '+')
{
str++;
}
//正常字符
while (*str)
{
if (isdigit(*str))
{
ret = ret * 10 + *str - '0';
//判断溢出
if (ret > INT_MAX || ret < INT_MIN)
{
if (flag == 1)
{
return INT_MAX;
}
else
{
return INT_MIN;
}
}
}
else
{
return (int)ret;
}
str++;
}
status = VALID;
return (int)ret;
}
int main()
{
char *p = "123";
int num = my_atoi(p);
printf("%d\n", num);
system("pause");
return 0;
}