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;
}