注意边界条件,比如滤掉空格,比如是否超出INT_MAX,是否小于INT_MIN,设置sign对整数的正负号进行区分,
(1)C语言实现
int myAtoi(char* str) {
int i = 0;
int sign = 1;
int base = 0;
while(str[i]==' '){
i++;
}
if(str[i]=='-'||str[i]=='+'){
sign = 1-2*(str[i++]=='-');
}
while(str[i]>='0'&&str[i]<='9'){
if(base>INT_MAX/10||base==INT_MAX/10&&str[i]-'0'>INT_MAX%10){
if(sign == 1)
return INT_MAX;
else
return INT_MIN;
}
base = base*10+str[i]-'0';
i++;
}
return base*sign;
}
(2)C++实现
class Solution {
public:
int myAtoi(string str) {
int i=0;
int base = 0;
int sign = 1;
while(str[i]==' '){
i++;
}
if(str[i]=='+'||str[i]=='-'){
sign = 1-2*(str[i++]=='-');
}
while(str[i]>='0' && str[i]<='9'){
if(base > INT_MAX/10 || base == INT_MAX/10&&str[i]-'0'>INT_MAX%10){
if(sign == 1)
return INT_MAX;
else
return INT_MIN;
}
base = base*10+str[i]-'0';
i++;
}
return base*sign;
}
};