把字符串转换成整数

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。

思路:

模拟,从头扫描,如果一开始遇到空格,跳过,如果是非数字字符和加减号,则直接返回0。如果遇见加减号和数字字符,则开始记录数字。再次遇到非数字字符则停止扫描。

代码:

class Solution {
public:
    bool isStart(char c) {
        if(c >= '0' && c <= '9' || c == '+' || c == '-') {
            return true;
        }
        return false;
    }
    bool isValidDigit(char c) {
        if(c >= '0' && c <= '9') {
            return true;
        }
        return false;
    }
    int strToInt(string str) {
        string validInt;
        bool begin = false;
        bool isSub = false;
        for(char c: str) {
            if(begin == false && c == ' ') {
                continue;
            }
            if(begin == false && !isStart(c)) {
                return 0;
            }
            if(begin == false && isStart(c)) {
                if(c == '-') {
                    isSub = true;
                }
                begin = true;
                if(c == '-' || c == '+') {
                    continue;
                }
            }
            if(begin && isValidDigit(c)) {
                validInt.push_back(c);
            }
            if(begin && !isValidDigit(c)) {
                break;
            }
        }
        
        long long ans = 0;
        int len = validInt.size();
        for(int i = 0;i < len;i++) {
            ans = ans * 10 + (validInt[i] - '0');
            if(ans > (long long)INT_MAX) {
                return isSub == true ? INT_MIN : INT_MAX;
            }
        }
        ans = isSub == true ? -ans:ans;
        return ans;
    }
};