这道题的规则怪怪的,尝试了几次才搞定,主要注意超过int范围时输出最大的int数,而不是输出0;遇到非法字符输出非法字符前面提取到的数字。
int myAtoi(char* str) {
int len;
int i;
int flag;
double res=0;
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]==' ')
continue;
else
break;
}
if(i==len)
return 0;
if(str[i]=='-')
flag=0;
else if(str[i]=='+')
flag=1;
else if(str[i]<='9'&&str[i]>='0')
flag=2;
if(flag==0||flag==1)
{
if(i==len-1)
return 0;
for(i=i+1;i<len;i++)
{
if(str[i]<='9'&&str[i]>='0')
{
double x=pow(10,(len-i-1));
res = res+x*(str[i]-'0');
}
else
{
res/=pow(10,len-i);
break;
}
}
}
if(flag==2)
{
for(;i<len;i++)
{
if(str[i]<='9'&&str[i]>='0')
{
double x=pow(10,(len-i-1));
res = res+x*(str[i]-'0');
}
else
{
res/=pow(10,len-i);
break;
}
}
}
if(flag==1&&res>2147483647.9)
return 2147483647;
if(flag==0&&res>2147483648.9)
return -2147483648;
if(flag==2&&res>2147483647.9)
return 2147483647;
if(flag==0)
return -(int)(res+0.1);
else
return (int)(res+0.1);
}