class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return int整型
     */
    int StrToInt(string s) {
        // write code here
        int n = s.size(), i = 0, sign = 1;
        long long res = 0;

        // 1) 跳过前导空格
        while (i < n && s[i] == ' ') ++i;
        if (i == n) return 0;

        // 2) 符号
        if (s[i] == '+' || s[i] == '-') {
            if (s[i] == '-') sign = -1;
            ++i;
        }

        // 3) 读数字,遇到非数字停止;期间做溢出保护
        bool has = false;
        while (i < n && s[i] >= '0' && s[i] <= '9') {
            has = true;
            int d = s[i] - '0';
            res = res * 10 + d;
            if (sign == 1 && res > INT_MAX) return INT_MAX;
            if (sign == -1 && -res < INT_MIN) return INT_MIN;
            ++i;
        }

        // 4) 无有效数字返回 0
        if (!has) return 0;
        return sign * res;
    }
};