8. String to Integer (atoi)字符串转换

实现atoi将字符串转换为整数。
提示:仔细考虑所有可能的输入案例。如果你想挑战,请不要在下面看到,问问自己可能输入的情况是什么。
注意:它是为这个问题指定模糊的(即,没有给定的输入规格)。你有责任把所有的输入需求收集到前面。

【别人的总结】

照着要求写代码,可以总结如下:

  1. 字串为空或者全是空格,返回0;
  2. 字串的前缀空格需要忽略掉;
  3. 忽略掉前缀空格后,遇到的第一个字符,如果是‘+’或‘-’号,继续往后读;如果是数字,则开始处理数字;如果不是前面的2种,返回0;
  4. 处理数字的过程中,如果之后的字符非数字,就停止转换,返回当前值;
  5. 在上述处理过程中,如果转换出的值超出了int型的范围,就返回int的最大值或最小值。
class Solution {
public:
int myAtoi(string str) {
    long long result = 0;
    int flag = 1;//负号标志
    size_t i = 0,len = str.size();
    //跳过空白
    while (str[i] == ' '){ ++i; }
    //查看 + - 
    if (str[i] == '-' || str[i] == '+'){
        flag = (str[i++] == '+') ? 1 : -1;
    }
    while (str[i] <= '9' && str[i] >= '0')
    {
        //每个字符都是以ascii码读取,所有需要减去0的ascii值:48
        result = result * 10 +(str[i++]-'0');
        if (result >= INT_MAX&&flag ==1){
            return INT_MAX;
        }
        else if (-result <= INT_MIN&&flag == -1)
        {
            return INT_MIN;
        }
    }
    return result*flag;
}
};

【别人家的代码】

class Solution {
public:
    int myAtoi(string str) {
        long long res = 0; // string could be greater than  max long long ;
        int i = 0;
        bool sign = true;
        
        // 1) step trim out whitespace;
        while (str[i] == ' ' && i < str.length()) {
            i++;
        }
        
        // 2) deal with sign;
        if (str[i] == '+' || str[i] == '-') {
            sign = (str[i] == '+') ? true : false;
            i++;
        }
        
        // 3) compute value;
        while (i < str.length()) {    
            //compute current value;
            if (str[i] >= '0' && str[i] <= '9') {
                res = res*10 + str[i]- '0'; 
                if (res - INT_MAX >= 1) { //overflow;
                    break;
                }
                i++;
            } else {
                break;
            }
            
        }
        
        if (res - INT_MAX >= 1) {
            if (sign) {
                return INT_MAX;
            }
            return INT_MIN;
        }
        
        res = sign ? res : (-1)*res;
        return res;
    }
    
};

你可能感兴趣的:(8. String to Integer (atoi)字符串转换)