【CCF】JSON查询
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<map> using namespace std; int n,m; const int maxn=82; char str[maxn]; bool flag; map<string,string> mp; string handle(string fa){ int len=strlen(str); len--; for(int i=0;i<len;i++){ if(str[i]=='"'){ string tmp; while(str[++i]!='"'){ if(str[i]!='\\'){ tmp+=str[i]; }else{ ++i; tmp+=str[i]; } } if(flag==false){ fa=fa+'.'+tmp; flag=true; }else{ mp[fa]="STRING "+tmp; flag=false; int sz=fa.length(); int j=sz-1; for(;j>=0;j--){ if(fa[j]=='.') break; } if(j<0) fa=""; else fa=fa.substr(0,j); } }else if(str[i]=='{'){ mp[fa]="OBJECT"; flag=false; }else if(str[i]=='}'){ int sz=fa.length(); int j=sz-1; for(;j>=0;j--){ if(fa[j]=='.') break; } if(j<0) fa=""; else fa=fa.substr(0,j); }else{ continue; } } return fa; } int main(){ cin>>n>>m; getchar(); string fa=""; flag=false; while(n--){ fgets(str,maxn,stdin); fa=handle(fa); } while(m--){ string query; cin>>query; query='.'+query; if(mp.find(query)!=mp.end()){ cout<<mp[query]<<endl; }else{ cout<<"NOTEXIST"<<endl; } } return 0; }