leetcoede 8 字符串转换整数

 1 class At{
 2     string state="start";
 3     unordered_map<string,vector<string>>table={
 4         {"start",{"start","signed","in_number","end"}},
 5         {"in_number",{"end","end","in_number","end"}},
 6         {"signed",{"end","end","in_number","end"}},
 7         {"end",{"end","end","end","end"}}
 8     };//状态转换图
 9     int get_c(char c){
10         if(c==' '){
11             return 0;
12         }else if(c=='+'||c=='-'){
13             return 1;
14         }else if(c>='0'&&c<='9'){
15             return 2;
16         }
17         return 3;
18     }//分别对应空格,加减,数字,其他
19 public:
20     int sign=1;
21     long long ans=0;
22     void get(char c){
23         state=table[state][get_c(c)];
24         if(state=="signed"){
25             sign=c=='+'? 1:-1;
26         }else if(state=="in_number"){
27             ans=ans*10+c-'0';
28             ans=sign==1?min(ans,(long long)INT_MAX):min(ans,-(long long)INT_MIN);//注意点INT_MAX!=-INT_MIN
29         }
30     }
31 };
32 class Solution {
33 public:
34     int myAtoi(string str) {
35         At at;
36         for(auto x:str){
37             at.get(x);
38         }
39         return at.sign*at.ans;
40     }
41 };
原文地址:https://www.cnblogs.com/greenofyu/p/13154895.html