CCF CSP真题——201709-3 json查询

本题为CCF CSP考试,2017年9月的第三题。具体题目在此不贴(没做这题的肯定也看不到这篇文章是吧?)。本文分享了我解决这道题的思路。
摘要由CSDN通过智能技术生成

       本题为CCF CSP考试,2017年9月的第三题。具体题目在此不贴。(没做这题的肯定也看不到这篇文章是吧?)这道题属于模拟类的题目,做出它不需要太多的高级算法,只需要照着题目说明一步一步往前走就能写出来。所以很多人认为这样的题很简单,充其量只是对使用STL熟练度的考察。然而当他们熟练使用STL却仍然写出复杂冗长且逻辑不通的代码,写到后来都不知道在写啥,以至于提交分数很低甚至为0的时候,他们才会发现这样的题目,真正考验的是大家对于“分析问题”、“流程”、“逻辑”的理解与控制。我认为这是一个比较有难度的学问。我也并没有掌握这方面的诀窍,即使这题我能分析出来,下一题也未必,不过这次让我们专注于这一题。下面我分享一下做这道题的思路,以及最终提交满分的C++代码。

        首先,这道题的意图很直接,就是让我们根据输入数据,产生一系列的键值对用于查询。接下来给出查询的键,让我们输出值。当然这题也可以在每次查询时,遍历整个输入数据,查找出对应的值。但我认为不如前一种方法来得方便与高效。因此我采用前面的方法实现。那么,如何存储键值对呢?——使用C++标准库的map可以轻易做到。

map<string, string> mp;

        确定了主要思路以后,接下来就按流程一个个地去解决吧。第一步,要先根据输入存储键值对。键一定是字符串,而值则可能是字符串,可能是对象。根据题目的要求,值为对象的键也有可能被查询。于是无论值是什么类型,这对键值都应该存到map里。所以我们先不考虑嵌套查询,将对象也视作字符串存进map里。下一步我们就需要思考,对于如此不规则的输入数据(存在各种空格及换行符用于美观),我们如何能从中分离出键值?为了避免空白(包括换行符)带来的影响,我们必须把空白从输入中去除,将输入浓缩为一个字符串,然后才能分离键值。预处理的代码如下:

	int n = 0, m = 0;
	cin >> n >> m;
	string s, json;
	// 将所有输入去空格,结合起来,赋给json进行处理
	string::iterator it;
	getline(cin, s);
	for (int i = 0; i
  • 23
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值