需要考虑一下几种特殊用例:
1 开头有空格的字符串,如“ 123”
2 溢出情况,需要输出int最大或最小值,这个判断可以参照翻转数字位数那道题
3 有正负号的问题,如“+123”,“-123”
4 数字夹杂着其他字符,如“1a3”,只返回前面的数字“1”
5 正负号不止一个,返回0,如“++1”
class Solution {
public:
int atoi(string str) {
if(str.length()==0)
return 0;
else{
int i,j,result;
result=0;
int flag=0;//用来标记正负号
i=0;
while(str[i]==' ')
{
i++;
}
for(;i<str.length();i++)
{
if(str[i]=='+'||str[i]=='-')
{
if(flag==0)
{
if(str[i]=='+')
flag=1;
else
flag=-1;
}
else
return result;
}
else if(str[i]>='0'&&str[i]<='9')
{
if(flag!=-1&&2147483647<(long long)result*10+str[i]-'0')//最大溢出
return INT_MAX;
else if(flag==-1&&(unsigned int)2147483648<(long long)result*10+str[i]-'0') //最小溢出
return INT_MIN ;
else result=result*10+str[i]-'0';
}
else
break;
}
if(flag==-1)
result=-1*result;
return result;
}
}
};