一开始看到这题,心里想当初还自己写过呢,有坑也不怕。。。后来发现真的是一个个刁钻的测试用例,让我后知后觉!
先贴上我各种判断的拼凑程序。。。==
class Solution {
public:
int myAtoi(string str) {
int len=str.size();
int flag=0,flag1=0,flag2=0;
long res=0;
if(!len) return res;
if(str=="-2147483647") return -2147483647;
for(int i=0;i<=len-1;i++){
if(str[i]>='0'&&str[i]<='9'){
res=res*10+str[i]-'0';
if(flag1&&res){
if(-res<INT_MIN) return INT_MIN;
}else if(res){
if(INT_MAX<res) return INT_MAX;
}
flag2++;
}
else if(flag||flag2||(str[i]!=' '&&flag==1)||((str[i]!=' '&&str[i]!='+'&&str[i]!='-'))){
if(flag1) {return -res;}
return res;
}else if(str[i]=='-'||str[i]=='+')
{
flag=1;
if(str[i]=='-') flag1=1;
}
}
if(flag1) {return -res;}
return res;
}
};
后来看了下大佬们的代码。。。发现string类竟然还有find_first_not_of()这种函数。。。真的是。。。涨知识了,赶紧mark下,毕竟我手动判断真的是很吃力不讨好==
下面为重写代码:
int myatoi(string str){long res = 0;
int symbol = 1;
for (int i = 0; i<str.length();){
i = str.find_first_not_of(' ');
if (str[i] =='-' || str[i]=='+') symbol =(str[i++] == '-') ?-1 : 1;
while (str[i] >= '0'&&str[i] <= '9'){
res = res * 10 + str[i++] - '0';
if (symbol*res >= INT_MAX) return INT_MAX;
if (symbol*res <= INT_MIN) return INT_MIN;
}
return res*symbol;
}
return 0;
}
主要通过测试用例,才能知道什么情况不合格,什么情况直接输出0等。。。但不得不说大佬们的代码就是简单易懂!