enum{
Start = 0,
Sign,
In_num,
End
};
int get_col(char c) {
if (c == ' ') return 0;
if (c == '+' || c == '-') return 1;
if ('0' <= c && c <= '9') return 2;
return 3;
}
const int table[4][4]={\
{Start,Sign,In_num,End},\
{End,End,In_num,End},\
{End,End,In_num,End},\
{End,End,End,End}\
};
int myAtoi(char * s){
int ans = 0;
int sign = 1;
int state = Start;
while('\0' != *s){
state = table[state][get_col(*s)];
if(In_num == state){
int temp = (*s) - '0';
if(ans > INT_MAX/10 || (ans == INT_MAX/10 && temp > 7))
return sign==1?INT_MAX:INT_MIN;
ans = ans*10 + temp;
} else if(Sign == state){
if('-' == *s)
sign = -1;
} else if(End == state)
break;
s++;
}
return sign==1?ans:-ans;
}
8-中等-字符串转换整数 (自动机)[C语言]
最新推荐文章于 2024-07-14 14:55:48 发布