满分答案(c++)
值得注意的是标签对大小写敏感,我的分数就是一步步改上来的(增加tolower)。还有一个就是题意有些不清楚,关于后代的选择,既可以用标签例如:div div p; 也可以夹杂着id,如:div #attr #main。(这个改对了就可以直接从80 -> 100 分✌️)
详细代码如下,欢迎讨论:
//
// Created by Sugars Mac on 2020/2/7.
//
// 元素选择器(html css)
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <array>
using namespace std;
const int N = 100;
const int M = 10;
struct Node {
string label, attr;
int lev, index; // 层次和行号
struct Node * child, * brother;
}node[N];
vector<int> result; // 保存查询结果
void strtolwr(string& input) {
for(auto& c : input) {
c = tolower(c);
}
}
void insert_child(struct Node* root, struct Node* newnode) {
if(root->child == nullptr) {
root->child = newnode;
} else {
struct Node * temp = root->child->brother;
struct Node * pre = root->child;
while(temp) {
// 找到一个空brother的child
pre = temp;
temp = temp->brother;
}
pre->brother = newnode;
}
}
void insert_brother(struct Node* root, struct Node* newnode) {