剑指 Offer 67. 把字符串转换成整数(不能开大的整数比如int参数,不能long)

注意的点:

  1. 排除空格,还有± 号,并且记录flag==1还是-1
  2. 大数判断!**重点在于判断的负数的时候,要转换成负数的,因为整数最大值和最小值的绝对值不一样,最小值绝对值大一个。**方法:在判断的时候用==INT_MIN来判断
  3. 也可以是通过按照不同flag进行计算的方式避免到达整数的最大值+1(负数最大值)
    
  4. 不能开大的存储类型时,用 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;

    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值