注意的点:
- 排除空格,还有± 号,并且记录flag==1还是-1
- 大数判断!**重点在于判断的负数的时候,要转换成负数的,因为整数最大值和最小值的绝对值不一样,最小值绝对值大一个。**方法:在判断的时候用==INT_MIN来判断
-
也可以是通过按照不同flag进行计算的方式避免到达整数的最大值+1(负数最大值)
- 不能开大的存储类型时,用 res > (INT_MAX-tmp)/10 来检验。因为res到不了,但是最大值可以变,最小值同理 -res< (INT_MIN+tmp)/10
code
class Solution {
public:
int strToInt(string str) {
if(str.empty( ))
return 0;
int res=0, n=str.size(),pos=0;
while(pos<n && str[pos]==' ')
pos++;
int flag=1;
if( pos<n && str[pos]=='-' ) flag=-1;
if(pos<n && (str[pos]=='+' || str[pos]=='-') ) pos++;
while(pos<n &&str[pos]-'0'>=0 && str[pos]-'0'<=9){
if ){
if( flag==1&& res> (INT_MAX-(str[pos]-'0'))/10 )
return INT_MAX;
else if( ( flag==-1 && -res <(INT_MIN+ (str[pos]-'0'))/10)|| -res*10-(str[pos]-'0')==INT_MIN )
return INT_MIN;
res= res*10+(str[pos]-'0'); //正数到不了这个最大值
pos++;
}
else
break;
}
return res*flag;
}
};