更輕的JSON
阿新 • • 發佈:2019-01-09
Problem description |
JavaScript Object Notation——JSON,是一種輕量級的資料交換格式。為了簡便起見,我們使用一種更輕量級的JSON來傳遞資料。 更輕的JSON格式如下:{JSON項, JSON項,…,JSON項}。即:由花括號包圍的若干(可為0項)用逗號分隔的JSON項。 JSON項的格式如下:鍵:值。鍵與值均是用雙引號括起的非空字串,雙引號之間的全部內容即為鍵或值的內容,鍵、值用冒號分隔。 空格不影響JSON格式的判別。不允許出現具有相同鍵的JSON項。 |
Input |
輸入有多個案例,每個案例的第一行是一個試圖表示“更輕的JSON”字串。第二行是一個代表鍵的字串(此字串不再有表包裹的雙引號,見樣例)。每行不超過100個字元(友情提示:在C語言中請用gets()讀取輸入)。 |
Output |
對於每個案例,輸出一行。如果JSON格式錯誤,則輸出JSONERROR;如果JSON字串中沒有輸入所要查詢的鍵,則輸出KEYERROR;否則輸出鍵對應的值。 |
Sample Input |
{"X":"1","Y":"2"} X |
Sample Output |
1 |
Problem Source |
HUNNU Contest |
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<map> using namespace std; map<string,string> p; int main() { //freopen("b.txt","r",stdin); string s,t; while(getline(cin,s)) { int i,n,x=0; bool flag=true; p.clear(); for(i=0;i<s.size();i++) //預處理空格 { if(s[i]=='"') x++; if(x%2==0&&s[i]==' ') s.erase(i,1),i--; } n=s.size(); if(n<2||s[0]!='{'||s[n-1]!='}') flag=false; else if(n!=2) { s[0]=','; for(i=-1;i+1<n-1;) { string str=""; if(s[++i]!=',') flag=false; else { if(s[++i]!='"') flag=false; else { while(s[++i]!='"'&&i<n-1) str+=s[i]; if(i==n-1||str=="") flag=false; } } if(!flag) break; string num=""; if(s[++i]!=':') flag=false; else { if(s[++i]!='"') flag=false; else { while(s[++i]!='"'&&i<n-1) num+=s[i]; if(i==n-1||num=="") flag=false; } } if(!flag) break; if(p.count(str)!=0) flag=false; else p[str]=num; if(!flag) break; } } getline(cin,t); if(flag) { if(p.count(t)==0) cout<<"KEYERROR"<<endl; else cout<<p[t]<<endl; } else cout<<"JSONERROR"<<endl; } return 0; }