class Solution {
public:
    bool isNumeric(string str) {
        // write code here
        //数字 continue。
        //加减要在 1、要在开头或者E的后面 2、且后面不能是E
        //E  1、只能出现一次 2、且不能在开头和最后
        //小数点 3、在e前只能出现1次,e后不行 2、小数点后要有数字
        bool hasE=false;
        int dot=0;
        for(int i=0;i<str.size();i++)
        {
            cout<<str[i]<<endl;
            if(str[i]>='0'&&str[i]<='9')
                continue;
            if(str[i]=='+'||str[i]=='-') // 判断 +- 不能出现的位置
            {
                if(i!=0&&str[i-1]!='e'&&str[i-1]!='E') // 当出现+- 如果不是开头 或者 前面没有指数e
                    return false;
                if(i==str.size()-1||str[i+1]=='E'||str[i+1]=='e') // 最后为+-,或者E的前面为+-
                    return false;
            }
            else if(str[i]=='E'||str[i]=='e')
            {
                if(hasE||i==0||i==str.size()-1) // 已经出现过e 或者 最前面 出现 或者最后面出现都不对
                    return false;
                hasE=true;
            }
            else if(str[i]=='.') //
            {
                if(hasE) // e 后面不能有小数
                    return false;
                if(dot>0) // 小数不能出现两次
                    return false;
                if(i==str.size()-1) // 小数点不能再最后一位
                    return false;  
                dot++;
            }
            else return false;
        }
        return true;
    }
};