CCF 201709-3 JSON查询 100分
Posted 登登登ccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF 201709-3 JSON查询 100分相关的知识,希望对你有一定的参考价值。
题目来源:- 计算机软件能力认证考试系统
思路:采用regex类处理,首先把输入的字符串合并到一起,再按照自己的需求通过regex类拆分,进行递归处理。
#include<bits/stdc++.h>
using namespace std;
stringstream ss;
unordered_map<string,string> ans;
bool handle(string key)
string value;
ss>>value;
if(value == "")
return false;
if(value == "")
if(key != "")
ans[key]=""; //该键对应的值是一个object
while(handle(key)); //递归处理直到当前里的字符串处理完
else
string v=value.substr(1, value.rfind('"')-1);
if(value.back() == ':') //back()返回末尾字符:,表示该字符串是键
handle((key == "") ? v : (key+"."+v)); //如果key存在,就继承key原来的值
else
ans[key]=v;
return true;
int main()
int a,b;
cin>>a>>b;
getchar();
string s="";
while(a--)
string line;
getline(cin,line);
s+=line;
s=regex_replace(s, regex(" "), "");
s=regex_replace(s, regex("\\\\\\\\\\""), "\\""); //将\\"转换为"(\\\\"代表")
s=regex_replace(s, regex("\\\\\\\\\\\\\\\\"),"\\\\"); //将\\\\转换为\\(\\\\\\代表\\)
s=regex_replace(s, regex(","), ", "); //在每个,字符后添加一个空格字符
s=regex_replace(s, regex(":"), ": "); //在每个:字符后添加一个空格字符
s=regex_replace(s, regex("\\\\"), " "); //在每个字符左右均添加空格字符(''要转义)
s=regex_replace(s, regex(",?"), " "); //将,转换为('?'要求','出现0次或1次)
ss<<s;
handle("");//递归处理
while(b--)
cin>>s;
if(ans.find(s) == ans.end()) //fina()查询不到会返回end()值
cout<<"NOTEXIST"<<endl;
else if(ans[s] == "")
cout<<"OBJECT"<<endl;
else
cout<<"STRING "<<ans[s]<<endl;
return 0;
C++正则表达式知识可参考以下内容:
C++正则表达式_HesseSummer的博客-CSDN博客_c++正则表达式
以上是关于CCF 201709-3 JSON查询 100分的主要内容,如果未能解决你的问题,请参考以下文章