给出一个 JSON 格式描述的数据,以及若干查询,编程返回这些查询的结果。c++
接下来 m 行,每行描述一个查询。给出要查询的属性名,要求返回对应属性的内容。须要支持多层查询,各层的属性名之间用小数点 . 链接。保证查询的格式都是合法的。编程
若是查询结果是一个对象,则输出 OBJECT,不须要输出对象的内容。
若是查询结果不存在,则输出 NOTEXIST。app
10 5
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "2ndStreet",
"city": "NewYork",
"state": "NY"
},
"esc\\aped": ""hello""
}
firstName
address
address.city
address.postal
esc\aped函数
STRING John
OBJECT
STRING NewYork
NOTEXIST
STRING "hello"post
50%的评测用例输入的对象只有 1 层结构,80%的评测用例输入的对象结构层数不超过 2 层。举例来讲,{"a": "b"} 是一层结构的对象,{"a": {"b": "c"}} 是二层结构的对象,以此类推。spa
#include <bits/stdc++.h> using namespace std; int n,m,num,i; string tot,x; string ql[100]; string str1,str2; char str[10000]; map<string,string>mp; void input() { cin>>n>>m; getchar(); tot="";num=0; for(int i=0;i<n;i++) { getline(cin,x); tot.append(x); } for(int i=0;i<m;i++){ getline(cin,ql[i]); } int i=0; while(tot[i]==' ') i++; for(;i<tot.size();i++){ while(tot[i]==' ') i++; str[num++]=tot[i]; } } string find() { i++; string tar; while(str[i]!='\"'){ if(str[i]!='\\'){ tar+=str[i]; i++; }else { tar+=str[i+1]; i+=2; } } i++; //cout<<tar<<endl; return tar; } void solve(string head) { for(;i<num;i++) { if(str[i]=='\"') { str1 = find(); if(head!="") str1 = head+'.'+str1; i++; if(str[i]=='\"'){ str2 = find(); //cout<<str1<<" "<<str2<<endl; mp[str1]=str2; }else { mp[str1]="####"; solve(str1); } } if(str[i]=='}'){i++;return;} } } int main() { i=0; input(); //cout<<str<<endl; solve(""); for(int i=0;i<m;i++) { //cout<<mp[ql[i]]<<endl; if(!mp.count(ql[i])){ cout<<"NOTEXIST"<<endl; //cout<<"STRING "<<mp[ql[i]]<<endl; }else { if(mp[ql[i]]=="####")cout<<"OBJECT"<<endl; else cout<<"STRING "<<mp[ql[i]]<<endl; } } return 0; }