leetcode【字符串】-----8. String to Integer (atoi)(字符串转换函数)

本文介绍了一个atoi函数的具体实现方法,该函数能够将输入的字符串转换为整数。文章详细讨论了如何处理空字符串、正负号及超出整数范围的情况,并提供了一段C++代码示例。

1、题目描述

2、分析

        请你来实现一个 atoi 函数,使其能将字符串转换成整数。需要注意的是题目中的各种限制,比如符号的处理,空字符的处理,还有超出限制长度的处理。

        这道题题目中其实限制条件比较少,就按照题目中的限制条件将每一个限制写成代码就好,首先如果字符串为空就返回0。接下来遇到空字符就跳过,设置一个标志标量,用来记录正负号。接下来只有在字符是在0-9之间才进行处理,这样就跳过了字母等无意义字符,并且会在循环之外返回0。在循环内部处理所有数字,首先处理超出长度限制,如何判断长度限制,首先,因为我们最终的数字是不断的*10的,比如字符串是123那么读取到第一个字符是1,记做1,接下来读到2,那么先给1*10,再加上2,读到第三个数字3的时候,先给前面的12*10,再加上最后的3。所以我们判断这个数会不会超出限制,只要判断前一步的值是不是大于INT_MAX除以10。如果等于的话。说明这个字符串前面那些高位的数字都和最大值相同,那么就要判断最低位的数字是几,我们知道INT_MAX=2147483647,也就是最低位不能超过7。这个判断的方法最好记住。

3、代码

class Solution {
public:
    int myAtoi(string str) {
        if(str.empty()) return 0;
        int flag=1,base=0,i=0,n=str.size();
        while(i<n&&str[i]==' ') ++i;
        if(i<n&&(str[i]=='+'||str[i]=='-')){
            flag=(str[i++]=='+') ? 1:-1;
        }
        while(i<n&&str[i]>='0'&&str[i]<='9'){
            if(base>INT_MAX/10||(base==INT_MAX/10&&str[i]-'0'>7)){
                return (flag==1) ? INT_MAX:INT_MIN;
                
            }
            base=base*10+(str[i++]-'0');
        }
        return base*flag;
        
    }
};

4、相关知识点

        特殊情况的处理,判断超出长度限制的思想需要记住。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值