https://leetcode-cn.com/problems/string-to-integer-atoi/
class Automat{
int Auto=0;
//0 空格
//1 +/-
//2 数字
//3 其他
unordered_map<int,vector<int>> table={
{0,{0,1,2,3}},
{1,{3,3,2,3}},
{2,{3,3,2,3}},
{3,{3,3,3,3}}
};
int get_type(char c){
if(c == ' ') return 0;
if(c == '+' || c == '-') return 1;
if(c-'0'>=0 && c - '0' <=9) return 2;
return 3;
}
public:
int sign =1;
long long ans=0;
void get(char c){
Auto=table[Auto][get_type(c)];
if(Auto == 2){
ans=ans*10 + c - '0';
ans = sign == 1 ? min(ans,(long long)INT_MAX) : min(ans,-(long long)INT_MIN);
}else if(Auto == 1){
sign = c == '+' ? 1 : -1;
}
}
};
class Solution {
public:
int myAtoi(string s) {
Automat automaton;
for (char c : s)
automaton.get(c);
return automaton.sign * automaton.ans;
}
};