/*科学:空格(0-n) 数字 e/E 数字
小数:空格(0-n) +/-(0-1) 数字(0-n) . 数字(0-n) 空格
整数: 空格(0-n) +/-(0-1) 数字(1-n) 空格
整数:1.空格++/-+数字+空格
    2.空格+ 数字 +空格
    3.+/- +数字+空格
    4.数字+空格
小数:1. 空格 + +/- +数字 +.+空格
    2.空格++/- + 数字+ . +数字+空格
    3.空格+ +/- +.+数字+空格
    4.+/-+
    5.
科学:1.空格+小数/整数+e+整数+空格
0.空格 0  +/- 1  数字 2   . 3
1.数字 2  . 3
2.数字 2  .4   空格 8  e 5
3.数字 4
4.数字 4    空格 8  e 5 
5.+/- 6     数字 7
6.数字 7
7.数字 7     空格 8
8.空格 8*/

bool isNumeric(char* str ) {
//错误1:丢了states[0][2]
    char states[9][5]={" sd.","d.","d.e ","d","de ","sd","d","d "," "};
    int next[9][4]={{0,1,2,3},{2,3},{2,4,5,8},{4},{4,5,8},{6,7},{7},{7,8},{8}};
    int index=0;
    int j;
    for(int i=0;i<strlen(str);i++){
    //错误2:忘记字符转换成对应的类型符号。
        char item;
    	if(str[i]>='0'&&str[i]<='9') item='d';
    	else if(str[i]=='+'||str[i]=='-') item='s';
    	else if(str[i]=='e'||str[i]=='E') item='e';
        else item=str[i];
        //错误3:由于在for中有定义了int j导致
        //int j=0;
        for(j=0;j<strlen(states[index]);j++){
            if(item==states[index][j])
                break;
            }
        }
        if(j==strlen(states[index])) return false;
        //错误4:在j的for循环中进行下面复制操作出错,因为上面的if判断会出问题。index已经改变。
        index=next[index][j];
    }
    //错误5:第一次直接return true不正确,因为 "+"这样的字符不符合终止条件
    //第二次 if(index==8) return true;也不正确,因为'5e2'
    if(index==2||index==4||index==7||index==8) return true;
    else return false;
}