Leedcode

8. String to Integer (atoi)

2018-06-04  本文已影响0人  凉拌姨妈好吃

实现atoi函数,注意越界问题


image.png

思路:一定要注意考虑越界问题,如果保存的数据超过int的最大值或最小值,就返回INT_MAX或INT_MIN。用long来保持数据,就可以判断数据有没有超过int的最大或最小值

class Solution {
public:
    int myAtoi(string str) {
        
        bool negative = false; 
        long num = 0;  
        if(str.size()<=0)
            return 0;
        
        for(int i = 0;i<str.size();)
        {
            while(str[i]==' ')
            i++;

            if(str[i]>'9'||str[i]<'0')
            {
                if(str[i]=='-'||str[i]=='+')
                {                     
                    negative = (str[i]=='-')?true:false;
                    i++;
                }
            }
            while('0'<=str[i]&&str[i]<='9')
            {
                num = num*10+(str[i]-'0');
                i++;
                
                if(negative&&((-num)<=INT_MIN)) return INT_MIN;
                if((!negative)&&((num)>=INT_MAX)) return INT_MAX;
            }
            return (negative ==true)?-num:num; 
        }
       
    }
};

别人的优化,用-1和1,感觉更简单一点

int myAtoi(string str) {
    long result = 0;
    int indicator = 1;
    for(int i = 0; i<str.size();)
    {
        i = str.find_first_not_of(' ');
        if(str[i] == '-' || str[i] == '+')
            indicator = (str[i++] == '-')? -1 : 1;
        while('0'<= str[i] && str[i] <= '9') 
        {
            result = result*10 + (str[i++]-'0');
            if(result*indicator >= INT_MAX) return INT_MAX;
            if(result*indicator <= INT_MIN) return INT_MIN;                
        }
        return result*indicator;
    }
}
上一篇下一篇

猜你喜欢

热点阅读