原题链接
参考java编译器词法分析程序的写法,有限向量机如下图所示:
对应程序如下:
class Solution {
public:
bool isNum(char c){
if(c - '0' >= 0 && c - '9' <= 0) return true;
return false;
}
bool isNumber(string s) {
char charArr[s.size() + 1];
strcpy(charArr, s.c_str());
int statue = 0;
int pos = 0;
while(pos < s.size()){
switch(statue){
case 0:
{
if(charArr[pos] == ' ') statue = 0;
else if(charArr[pos] == '+' || charArr[pos] == '-') statue = 1;
else if(isNum(charArr[pos])) statue = 2;
else if(charArr[pos] == '.') statue = 9;
else return false;
}
break;
case 1:
{
if(isNum(charArr[pos])) statue = 2;
else if(charArr[pos] == '.') statue = 9;
else return false;
}
break;
case 2:
{
if(isNum(charArr[pos])) statue = 2;
else if(charArr[pos] == ' ') statue = 8;
else if(charArr[pos] == '.') statue = 4;
else if(charArr[pos] == 'e') statue = 3;
else return false;
}
break;
case 3:
{
if(charArr[pos] == '+' || charArr[pos] == '-') statue = 6;
else if(isNum(charArr[pos])) statue = 7;
else return false;
}
break;
case 4:
{
if(isNum(charArr[pos])) statue = 5;
else if(charArr[pos] == ' ') statue = 8;
else if(charArr[pos] == 'e') statue = 3;
else return false;
}
break;
case 5:
{
if(charArr[pos] == 'e') statue = 3;
else if(isNum(charArr[pos])) statue = 5;
else if(charArr[pos] == ' ') statue = 8;
else return false;
}
break;
case 6:
{
if(isNum(charArr[pos])) statue = 7;
else return false;
}
break;
case 7:
{
if(charArr[pos] == ' ') statue = 8;
else if(isNum(charArr[pos])) statue = 7;
else return false;
}
break;
case 8:
{
if(charArr[pos] == ' ') statue = 8;
else return false;
}
break;
case 9:
{
if(isNum(charArr[pos])) statue = 5;
else return false;
}
break;
}
pos++;
}
if(statue == 8 || statue == 2 || statue == 5 || statue == 7 || statue == 4) return true;
return false;
}
};