看到这道题的时候,哦,挺简单的,就开始着手去写。然而错了,其实并不是你想的那样。
对于这道题我们要考虑的情况:
- 字符串前面有空格
- 前面的‘+’‘-’
- 定义的int是否溢出
- 不合法情况eg:“-123de4”
#include <stdio.h>
#include <Windows.h>
#include <assert.h>
#include <ctype.h>
typedef enum STATE
{
VAILD,
INVAILD
}STATE;
//定义一个枚举来标识合法与不合法状态
STATE state = VAILD;
//刚开始为合法
int my_atoi(const char* str)// -12345
{
assert(str);
int flag = 1;
int len = strlen(str);
long long ret = 0;
if (*str=='\0') //刚开始遇到‘\0’直接return 00
{
return 0;
}
while (isspace(*str))
//处理空格的情况
{
str++;
}
if (*str == '-')
//遇到‘-‘将flag=-1
{
flag = -1;
str++;
}
if (*str == '+')
{
str++;
}
while (*str)
{
if (isdigit(*str))
{
ret= ret * 10 + (*str - '0')*flag;
//遇到数字依次累加
if ((ret > INT_MAX) || (ret < INT_MIN))
//判断是否溢出
{
ret = 0;
//溢出返回0
break;
}
str++;
}
else
{ state = INVAILD;
//非法遇到的字符不是数字,返回0
ret = 0;
break;
}
}
return (int)ret;
}