Skip to content

Instantly share code, notes, and snippets.

@HaiyangXu
Created May 6, 2014 15:20
Show Gist options
  • Save HaiyangXu/a10d25a21484fa5ab6d5 to your computer and use it in GitHub Desktop.
Save HaiyangXu/a10d25a21484fa5ab6d5 to your computer and use it in GitHub Desktop.
class Solution {
public:
bool isNumber(const char *s) {
enum InputType{
INVALID,//0
SPACE,//1
DIGIT,//2
SIGN,//3
DOT,//4
EXPONET,//5
NUM,//6
};
int transilationTable[][NUM]={
//INV SPA DIG SIGN DOT EXPONET
-1, 0, 1, 8, 4, -1,//state 0
-1, 3, 1, -1, 2, 6,//state 1
-1, 3, 2, -1, -1, 6,//state 2
-1, 3, -1, -1, -1, -1,//state 3
-1,-1, 5, -1, -1, -1,//state 4
-1, 3, 5, -1, -1, 6,//state 5
-1,-1, 7, 9, -1, -1,//state 6
-1, 3, 7, -1, -1, -1,//state 7
-1,-1, 1, -1, 4, -1,//state 8
-1,-1, 7, -1, -1, -1,//state 9
};
int state=0;
int i=0;
while(s[i]!='\0')
{
InputType inputType=INVALID;
if(isdigit(s[i]))
inputType=DIGIT;
else if(isspace(s[i]))
inputType=SPACE;
else if('+'==s[i]||'-'==s[i])
inputType=SIGN;
else if('.'==s[i])
inputType=DOT;
else if('e'==s[i]||'E'==s[i])
inputType=EXPONET;
state=transilationTable[state][inputType];
if(-1==state)return false;
++i;
}
return state==1||state==2||state==3||state==5||state==7;
}
};
@HaiyangXu
Copy link
Author

状态转移图:
数字识别有限状态机转移图

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment