题目描述:

将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

解题思路:

需要处理的特殊条件:

  • 输入为空;
  • 带有正负号,可能不止一个;
  • 非法输入(不是数字);
  • 超过整数的最大值和最小值;
  • 字符串只有0的时候应该返回0,但是异常也是返回0,要区分这两种情况。

Demo:

class Solution {
public:
    bool g_flag = false;
    int StrToInt(string str) {
        int sz = str.size(), i = 0;
        int flag = 1;
        long long int res = 0;
        // 省略前缀空格
        for (; i < sz; i++)
            if (str[i] != ' ') break;
        // 处理正负号不止一个的情况
        if (str[i] == '-') {
            flag = -1;
            i++;
        }
        if (str[i] == '+')
            i++;
        for (; i < sz; i++){
            if(str[i] >= '0' && str[i] <= '9'){
                res = res * 10 + (str[i] - '0');
                // 处理溢出的情况
                if ( flag == 1 && res >= 2147483647 )
                    return 2147483647;
                if ( flag == -1 && res <= -2147483648 )
                    return -2147483648;
            }
            // 处理输入不是数字的情况
            else return 0;
        }
        // 处理输入为空或者是输入只有0的情况
        return flag == 1 ? res : -res;
    }
};