CCF 201809-3 2018年9月第三题元素选择器(C++ 100分题解)

CCF 201809-3 2018年9月第三题元素选择器(C++ 100分题解)

试题编号: 3
试题名称: 元素选择器
时间限制: 1.0s
内存限制: 512.0MB
在这里插入图片描述
提交后100分代码:
这道题的大致思路:首先用stringstream对输入的字符串进行分词,然后进行一系列处理(可以直接用if逻辑硬刚,也可以用正则表达式)获得需要的属性,包括标签名、id属性名、节点所在层级等。然后建树,将节点全部插入树中。最后对询问进行反馈,关键是对分词处理后的询问的字符串序列和每个节点(可以用层序遍历、先序遍历、后序遍历)的从根节点到它的路径进行比较。

这道题本身很简单,但是我刚做的时候很多东西都不会,正好借这个题目学习了很多。
第一,对于字符串的处理,要用到stringstream进行分词,可以用正则表达式进行匹配;
第二,数据结构,这其实就是一个简单的普通的多叉树,用层序遍历(随便哪种遍历都行)按照题目要求查找指定的节点即可。
题目里面有些要注意的地方,比如标签选择器大小写不敏感,匹配时都转成小写。


```cpp
#include <iostream> 
#include <sstream>
#include <queue>
#include <regex>
#include <vector>
#include <set>
#include <stack>
using namespace std;
string nameOfParent[100];//用来存放每一个层级的最后一个加入的节点的标签名 name。 

struct node{//对树节点的定义  
	int lineNum, level, parentLevel; //lineNum是节点输入的行数,其实就是节点的序号;level是根据每行输入的前部的"."的数量进行等级
									 //的评定࿰
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值