2021-08-30剑指 Offer 67. 把字符串转换成整数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

要考虑到的问题有:
1、如何删去前置空格?
isspace()函数 + while循环解决
2、是否为有效的转化?
1)是否存在数字?
如果遇到不是数字就直接返回,这个直接利用char类型的比较方式就可以搞定
如果是就用ret * 10 + x;
x = s[i]-‘0’;
2)是否长度存在?
直接判断
3、如何处理符号?
暂时不知道如何处理加号,对于c++,如果当前存在加号的话,直接向后移动一个就好了,其他的情况不用考虑处理的方式。
4、如何处理越界的数字?
在这里插入图片描述
作者:jyd
链接:https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/solution/mian-shi-ti-67-ba-zi-fu-chuan-zhuan-huan-cheng-z-4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class Solution {
public:
    int strToInt(string str) {
        int n = str.size();
        if(n == 0)
        return 0;
        //1)如果为空字符串就直接返回
        int i = 0,s = 1,ret = 0,boundry = INT_MAX /10;
        //2)分别标记下标,符号位,返回的值,检查是否越界的值
        
        while(i < n && isspace(str[i]))
        i++;//指向第一个不为空格的数字
        //检测是否有符号位
        if(str[i] == '-'){
            s = -1;
            i++;
        }
        else if(str[i] == '+')
        i++;
        for(int j = i;j < n;j++){
            if(str[j] < '0' || str[j] > '9')
            break;
            if(ret > boundry || (ret == boundry && str[j] > '7') )
            return s == 1 ? INT_MAX : INT_MIN;
            ret = ret * 10 + (str[j] - '0');
        }
        return ret*s;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值