PKU 3332 Parsing Real Numbers
http://poj.org/problem?id=3332
小数が入力されるので、それが正しい入力かを判定するというような問題。
前にも似たような問題があったけれど、微妙に違うっぽいです。
整数のみもILLEGALにして1WA。
string in; int pos; bool ok; void exp(){ if(pos==SZ(in)){ ok-false; return; } if(in[pos]=='+' || in[pos]=='-')++pos; if(pos==SZ(in) || !isdigit(in[pos])){ ok=false; return; } while(pos<SZ(in) && isdigit(in[pos]))++pos; if(pos==SZ(in))return; ok=false; } void sdec(){ if(pos==SZ(in) || !isdigit(in[pos])){ ok=false; return; } while(pos<SZ(in) && isdigit(in[pos]))++pos; if(pos==SZ(in)){ return; }else if(in[pos]=='E' || in[pos]=='e'){ ++pos; exp(); }else{ ok=false; } } void fint(){ if(in[pos]=='+' || in[pos]=='-')++pos; if(pos==SZ(in) || !isdigit(in[pos])){ ok=false; return; } while(pos<SZ(in) && isdigit(in[pos]))++pos; if(pos==SZ(in)){//? return; } if(in[pos]=='.'){ ++pos; sdec(); }else if(in[pos]=='e' || in[pos]=='E'){ ++pos; exp(); }else{ ok=false; } } main(){ int n; cin>>n; cin.ignore(); rep(i,n){ string temp; getline(cin,temp); in=""; rep(i,SZ(temp)) if(temp[i]!=' ')in+=temp[i]; pos=0; ok=true; fint(); cout<<(ok?"LEGAL":"ILLEGAL")<<endl; } }