按照题目要求首先解决了开始是空格的情况,然后开始判断第一个是不是‘+’或‘-’,之后就是转换过程遇到字符就结束。
特别的是越界问题,按要求分别考虑最小越界和最大越界,我是先判断在越界之前一个数是不是超过了最大值/10,如果相等再判断再加一个数之后是否会越界。
代码如下:
class Solution { public: int myAtoi(string str) { if(str.empty()) return 0; int i=0; for(auto c: str){ if(isgraph(c))//bushikongge break; i++; } if(i==str.size()) return 0; int number=0; bool flag=false; if(str[i]=='-') { flag=true; i++; } else if(str[i]=='+') i++; int a; for(;i<str.size();i++){ a=number; if(isdigit(str[i])) { if(number>INT_MAX/10) { if(flag) return INT_MIN; else return INT_MAX; } if(number==INT_MAX/10){ if(!flag){ if(str[i]-'0'>INT_MAX%10) return INT_MAX; } else if(str[i]-'0'>INT_MAX%10+1) return INT_MIN; } number=number*10-'0'+str[i]; } else break; } if(flag) return -(number); else return number; } };