/*
 * @lc app=leetcode.cn id=8 lang=cpp
 *
 * [8] 字符串转换整数 (atoi)
 */

// @lc code=start
class Solution {
public:
    int myAtoi(string str) {
        int idx = 0;
        
        long long val = 0;
        
        char flag = 0;
        int start = 0;
        for (; idx < str.length(); ++idx) {
            if (str[idx] == ' ') {
                if (start) {
                    return 0;
                }
                continue;
            }
            if (str[idx] == '+') {
                if (start == 0) {
                    start = 1;
                    continue;
                }
                
                return 0;     
            }
            if (str[idx] == '-') {
                if (start == 0) {
                    start = 1;
                    flag = 1;
                    continue;
                }
                
                return 0;
            }
            
            if (str[idx] >= '0' && str[idx] <= '9') {
                break;
            }
            
            return 0;
        }
        
         for (; idx < str.length(); ++idx) {
             if (str[idx] >= '0' && str[idx] <= '9') {
                val = val * 10 + str[idx] - '0';
                if (val > INT_MAX) {
                     if (flag)
                        return INT_MIN;
                     else 
                        return INT_MAX;
                 }
                continue;
             }
             
             break;
         }
        
         if (flag) {
             val = -val;
         }
        
        
         return val;
    }
};
// @lc code=end