LeetCode——string to integer

题目描述:
实现函数 atoi 。函数的功能为将字符串转化为整数
提示:仔细思考所有可能的输入情况。这个问题故意描述的很模糊(没有给出输入的限制),你需要自己考虑所有可能的情况。

这个题目之前在剑指offer上好像有类似的题,但是感觉leetcode上限制的条件更多,或者说给出的提示更少,需要自己考虑各种情况。

  1. 第一个字符是+,-,或者空格这样的字符时,应该怎么处理;
  2. 中间有字母的情况时怎么处理;对于这种情况,一开始的考虑是直接判定该字符串不符合条件返回,但是好像不能这样处理,需要输出字母前正确的数字;
  3. 数字越界怎么处理。这个问题在我的代码中并没有考虑到。
class Solution {
public:
    int atoi(const char *str) {
        int i=0;
        int output=0;
        while(str[i]=='+'||str[i]=='-'||str[i]==' '){
            i++;
        }
        int j=i;
        while(str[i]!='\0'){
            if('0'<=str[i]&&str[i]<='9'){
                output=output*10+str[i]-'0';
            }
            else break;
            i++;
        }
        if(str[j-1]=='-')return (0-output);
        else return output;
    }
};

以上,待补充。。。(只通过了90%的测试用例)

来更新
对于这类问题,我们首先也需要知道需要输出的整数的正负号问题,所以可以提前设置一个标志位用于记录其符号。
对于数据溢出问题,在设置output时,将其数据类型设置为long long类型,long long类型数据,占8字节,64位, 而int型数据类型,占4字节,32位,取值范围位2147483647~-2147483648。当数据溢出时,直接赋值为取值范围内的最大或最小值即可。

修改后通过率100%的代码:

class Solution {
public:
    int atoi(const char *str) {
        int i=0;
        int sign=0;
        long long output=0;
        while(str[i]=='+'||str[i]=='-'||str[i]==' '){
            if(str[i]=='-'){
                sign=-1;
            }
            i++;
        }
        while(str[i]!='\0'){
            if('0'<=str[i]&&str[i]<='9'){
                output=output*10+str[i]-'0';
                if(output>INT_MAX){
                    if(sign<0){
                        return INT_MIN;
                    }
                    else return INT_MAX;
                    break;
                }
            }
            else break;
            i++;
        }
       if(sign<0)return (0-output);
        else return output;
    }
};

【心中有力量】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值