这个题的css选择器我比较熟悉,居然卡在了90分,最后发现在大小写上出了问题
我看网上许多代码用到了树结构,实际上不需要用到树,直接用文档前面的‘.’的个数表示层级就行
题目分析:
- 利用结构体存储每行的‘.’的个数、标签名、id名,在将结构体存入容器中
- 单个的标签选择或id选择直接在容器中寻找
- 多个选择器A B,遍历容器寻找B,在B的前面寻找是否有A标签(A可以是组合的)
难点
- 在B的前面寻找是否有A标签,需要注意层级必须比B的层级地
- 对与输入和输出中的标签选择器比较时需要注意大小写
- 输入需要用getLine(),因为一行输入中可能存在空格
#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>
typedef struct {
int chengJi;
string ss;
string id;
}WD;
int getChengJi(const string &s) {
int num = 0;
while(s.find('.', num) != s.npos ) {
//有'.'
++num;
}
return num;
}
void printByBiaoQian(const vector<WD> &v, string &s) {
int num=0, i=1;
vector<int> vv;
vv.reserve(100);
if (s.find('#') == s.npos) {
//标签选择
for (vector<WD>::const_iterator it=v.begin(); it!=v.end(); ++it) {
if (it->ss == s) {
++num;
vv.push_back(i);
}
++i;
}
} else {
//id选择
for (vector<WD>::const_iterator it=v.begin(); it!=v.<