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是根据每行输入的前部的"."的数量进行等级
//的评定