65. 有效数字
跟这个是一个题剑指 Offer 20. 表示数值的字符串
《编译原理》里的dfa,不会的话建议学一下编译原理。。
面向用例编程。。根据错的用例改了好多次dfa...最后是这样:

class Solution {
public:
bool isNumber(string s) {
stringstream ssin(s);
int cnt=0;
while(ssin>>s) cnt++;
if(cnt!=1)return false;
int n=s.size();
int st=0;
for(auto c:s){
switch(st){
case 0:
if(c=='-' || c=='+')st=6;
else if(isdigit(c))st=1;
else if(c=='.')st=5;
else return false;
break;
case 1:
if(isdigit(c))st=1;
else if(c=='.')st=2;
else if(c=='e')st=3;
else return false;
break;
case 2:
if(isdigit(c))st=2;
else if(c=='e')st=3;
else return false;
break;
case 3:
if(isdigit(c))st=4;
else if(c=='-' || c=='+')st=7;
else return false;
break;
case 4:
if(isdigit(c))st=4;
else return false;
break;
case 5:
if(isdigit(c))st=2;
else return false;
break;
case 6:
if(isdigit(c))st=1;
else if(c=='.')st=5;
else return false;
break;
case 7:
if(isdigit(c))st=4;
else return false;
break;
}
}
return st==1 || st==2 || st==4;
}
};