模拟实现atoi Convert strings to double (atof), integer (atoi, _atoi64), or long (atol).
需要注意1. 空指针
2. 空字符串
3. 遇到了非数字字符
4. 超出范围
#include<stdio.h>
#include<ctype.h>
#include<assert.h>
#include<limits.h>
enum Status
{
VALID,
INVALID
}sta=INVALID;//默认非法
int my_atoi(const char*str)
{
int flag=1;
assert(str);//判断是否为空指针
if(*str=='\0')
return 0;//非法
while(isspace(*str))//判断一个字符是否为空字符
{
str++;
}
if(*str=='+')
{
flag=1;
str++;
}
else if(*str=='-')
{
flag=-1;
str++;
}
long long ret=0;// 防止数值越界
while(*str)
{
if(isdigit(*str))//判断是否为数字字符
{
ret=ret*10+flag*(*str-'0');
if(ret>INT_MAX||ret<INT_MIN)//整形的最大值和最小值
{
return 0;
}
}
else
{
return (int)ret;
}
str++;
}
if(*str=='\0')
{
sta=VALID;
}
return (int)ret;
}
int main()
{
char arr[1000];
gets(arr);
int ret = my_atoi(arr);
if(sta==INVALID)
printf("非法输入:%d\n",ret);
else if(sta==VALID)
printf("合法转换:%d\n",ret);
return 0;
}