这道题看起来不难,但是他要考虑的小细节也太多了。除了题目中已经给出来的样例,还有几个测试过程中发现的样例。考虑还是不够全面
整数溢出这一块处理的还是不够好。
INT_MIN=-2^31=-2147483648
INT_MAX=2^31-1=2147483647
刚开始只是简单处理
对于 ans1=ans0*10+str[i] 当ans0<INT_MIN/10 或者ans1>INT_MAX/10,时就判断其溢出,后来发现过于粗略了,例如
输入:"2147483646"
预期:2147483646
但是在我的考虑下输出:2147483647,只判断了个位以外的情况,没有判断前9位=214748364,而最后一位<7的情况,此时并没有溢出
还有就是
输入:"+1" 预期:1
需要注意一下
class Solution {
public:
int myAtoi(string str) {
int len=str.length(),ans=0;
string result;
int flag=0; //flag用来存储是否找到了开头
bool zheng=true; //用来记录结果是正是负
for(int i=0;i<len;i++){
if(flag==0){
if(str[i]==' '); //跳过开头的空格
else if(str[i]=='-'){
result+='-';
flag=1;
zheng=false;
}
else if(str[i]=='+'){
flag=1;
}
else if(isdigit(str[i])){
ans=str[i]-48;
// cout<<str[i]<<":::"<<ans<<endl;
flag=1;
}
else {
return 0;
}
}
else{
if(isdigit(str[i])){
if(zheng==false){ //如果是负数
if(-ans<INT_MIN/10 || (-ans==INT_MIN/10 && str[i]-48>=8)){
return INT_MIN;
}
}
else if(zheng=true){
if(ans>INT_MAX/10 ||(ans==INT_MAX/10 && str[i]-48>=7)){
return INT_MAX;
}
}
ans=ans*10-48+str[i];
}
else{
break;
}
}
}
if(zheng==false){
return -ans;
}
else{
return ans;
}
}
};