字符串转整数

文章讲述了在处理字符串转整数的过程中,如何修正代码以正确处理边界情况,包括避免正溢出和在负数情况下返回正确的INT_MIN。作者在循环判断中加入符号sign的条件以确保下界情况的正确处理。
摘要由CSDN通过智能技术生成

字符串转整数

一定要判断是否越界,不然会出现runtime error的错误
题目:
题目描述
需要判断是否越界,INT_MAX、INT_MIN为int类型的上下界。
错误1:

while(s[i] >= '0' && s[i] <= '9'){
k = s[i]-'0';
if((sign == 1) &&(ans>MAX_VALUE/10 || (ans == MAX_VALUE/10 && k>7)))
    return MAX_VALUE;
if((sign == -1) && (ans<MIN_VALUE/10 || (ans == MIN_VALUE && k<-7)))
    return MIN_VALUE;
ans = ans*10+k;
i++;
}

这里在下溢出时总是返回正上界,无法返回正确的下界,以为是我下界计算失误,检查后发现并没有。于是查看循环条件发现这里在进行判断时,已经将符号摘出去了,所以无论如何都不可能出现负数的情况,也就不可能出现下溢出且返回下边界。
于是进行修改,添加sign的判断条件,当sign=-1时,直接返回下边界。

class Solution {
public:
    int myAtoi(string s) {
        int i=0,k=0;
        long long ans=0;
        int n = s.size();
        int sign = 1; //判断是否为负数
        while(s[i]==' ') i++;  //找到不是空格的第一个元素
        if(s[i]=='-'){
            sign = -1;  //为负数,将flag记为true
            i++;
        }
        else if(s[i]=='+') i++;
        while(s[i] >= '0' && s[i] <= '9'){
            k = s[i]-'0';
            if (ans > INT_MAX / 10 || (ans == INT_MAX / 10 && s[i] > '7')) {  
                return sign > 0 ? INT_MAX : INT_MIN;  
            }  
            ans = ans*10+k;
            i++;
        }
        
        return sign*ans;
    }
};
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值