剑指Offer——JZ49.把字符串转换成整数

题目传送门


在这里插入图片描述


题解

  • 注意正负问题
  • 面试时,可以选取鲁棒性更好的实现

AC-Code

class Solution {
public:
    int StrToInt(string str) {
        int num = 0;
        bool flag = true;    // true:+, false:-
        int start = 0;
        if(str[0] == '+' || str[0] == '-') {
            flag = str[0] == '+';
            ++start;
        }
        else if(str[0] <= '0' || str[0] >= '9')
            return 0;
        for(int i = start; i < str.length(); ++i) {
            if(str[i] <= '0' || str[i] >= '9')
                return 0;
            num = num * 10 + str[i] - '0';
        }
        return num * (flag ? 1 : -1);
    }
};
  • 更鲁棒代码
class Solution {
public:
    int StrToInt(string str) {
        const int len = str.length();
        if (len == 0) return 0;
        int i = 0;
        while (i < len && str[i] == ' ') { ++i; } // 排除开头的空格
        if (i == len) return 0;
        if (!isdigit(str[i]) && str[i] != '+' && str[i] != '-') return 0;
        bool neg = str[i]=='-' ? true : false;
        i = isdigit(str[i]) ? i : i+1;
        long long ans = 0L;

        while (i < len && isdigit(str[i])) {
            ans = ans * 10 + (str[i++]-'0');

            if (!neg && ans > INT_MAX) {
                ans = INT_MAX;
                break;
            }
            if (neg && ans > 1L + INT_MAX) {
                ans = 1L + INT_MAX;
                break;
            }
        }
        if (i != len) return 0; // 不要此处,就是atoi()库函数的实现
        return !neg ? static_cast<int>(ans) : static_cast<int>(-ans);
    }
};

猜你喜欢

转载自blog.csdn.net/Q_1849805767/article/details/106902642