1. 处理空字符串
  2. 忽略前置空格
  3. 保存符号
  4. 处理非法输入
  5. 处理溢出
class Solution {
public:
    int atoi(const char *str) {

        //处理遇到空串得情况。
        if(strlen(str)==0) return 0;

        int idx = 0, sign = 1, val =0;//idx是全局索引
        //处理前面有一堆0得情况
        while(str[idx]==' ') ++idx;//返回就是那个没有空字符串得索引(技巧)。


        //记录符号(并行就行了。不可能同时出现+-)(就算下面indx++也没事)(有正号,负号,或者没有符号)
        if(str[idx]=='-') {sign = -1; idx++;}

        if(str[idx]=='+') {sign = 1; idx++;}

        for(;idx<strlen(str);idx++){

            // 4. 处理非法值(可以字串层面取比较)
            if(str[idx]>'9') break;

            //5. 处理溢出
            //在下次输入时,/10是在int32 范围内还能进行比较。如果等于整除,要看下一个数是否是大于INT32_MAX 最后            
            //一个数,如果是就返回,依据符号,最大正,最小负。

            if(val> INT32_MAX/10 || ( val==INT32_MAX /10 && INT32_MAX % 10 < str[idx]-'0') )
                return sign==1? INT32_MAX : INT32_MIN;

            val = val*10 + str[idx] - '0';//加和


        }


        return sign*val;


    }
};