题目
分析
完整代码
#include <stdio.h>
#include<string.h>
#include<limits.h>
int myAtoi(char* str);
int main()
{
char str[12]="2147483648";
printf("int_max=%d,%d\n",INT_MAX,myAtoi(str));
return 0;
}
int myAtoi(char* str)
{
if(str==NULL)
{
return 0;
}
long long int total=0;
int ispositive=1;//判断是否是负数
int i;
for(i=0;i<strlen(str);i++)
{
if(isspace(str[i]))//跳过空格
{
continue;
}
else//字符开始
{
if(str[i]=='-')//判断正负
{
ispositive=0-1;
i++;
}
else if(str[i]=='+')
{
i++;
}
int j;
for(j=i;j<strlen(str);j++)
{
switch(str[j])
{
case '0':
{
total=total*10+0;
break;
}
case '1':
{
total=total*10+1;
break;
}
case '2':
{
total=total*10+2;
break;
}
case '3':
{
total=total*10+3;
break;
}
case '4':
{
total=total*10+4;
break;
}
case '5':
{
total=total*10+5;
break;
}
case '6':
{
total=total*10+6;
break;
}
case '7':
{
total=total*10+7;
break;
}
case '8':
{
total=total*10+8;
break;
}
case '9':
{
total=total*10+9;
break;
}
default:
{
return total*ispositive;
break;
}
}
if(ispositive==1)//判断是否越界
{
if(total>INT_MAX)
{
return INT_MAX;
}
}
else
{
if(ispositive*total<INT_MIN)
{
return INT_MIN;
}
}
}
break;
}
}
return total*ispositive;
}