You are viewing a single comment's thread. Return to all comments →
class Tag { public:
vector< pair< string , string > > att; string title; string queryFormat; vector< Tag > children; bool closeTag; Tag(){} Tag(string s){ s.erase(s.end() -1); s.erase(s.begin() , s.begin() + 1); if (s[0] == '/') { closeTag = true; s.erase(s.begin() , s.begin() + 1); }else{ closeTag = false; } replace(s.begin() , s.end() , '=' , ' '); replace(s.begin() , s.end() , '\"' , ' '); stringstream ss (s); string key ; string val; ss>>title; while (ss) { ss>> key>>val; att.push_back(make_pair(key,val)); } ; att.erase(att.end() -1 ); }
};
int main(int argc, char const *argv[]) {
int t , q; string line; getline(cin , line); istringstream input(line); input>>t>>q; vector<string> ta , qa; vector<Tag> tags; for (int i =0 ; i< t; i++) { string temp; getline(cin , temp); ta.push_back(temp); } for (int i =0 ; i< q; i++) { string temp; getline(cin , temp); qa.push_back(temp); } for (int i =0 ; i< ta.size(); i++) { Tag tag = Tag(ta[i]); tags.push_back(tag); } vector<string> currentParents; map<string , string> tagsQuires; for (int i =0 ; i< tags.size(); i++) { if (!tags[i].closeTag) { currentParents.push_back(tags[i].title); } for (int j = i+1 ; j < (tags.size() - (i + 1)); j++) { if (tags[j].title != tags[i].title ) { if (!tags[j].closeTag) { tags[i].children.push_back(tags[j]); } }else{ j = tags.size(); } } if ( tags[i].closeTag ) { currentParents.erase(currentParents.end()-1); // for (int k = 0; k < currentParents.size(); k++) // { // cout<<currentParents[k]<<" "; // } // cout<<currentParents.size()<<" for "<<tags[i].title<<endl; if (currentParents.size()> 0) { for (int l = 0; l < currentParents.size(); l++) { tagsQuires[tags[i].title] += (currentParents[l] +'.'); } tagsQuires[tags[i].title] += tags[i].title; }else{ tagsQuires[tags[i].title] = currentParents[0]; } } } for (auto i = tags.begin(); i != tags.end(); ++i) { if ((*i).closeTag) { tags.erase(i); i--; } } for (int i =0 ; i< qa.size(); i++) { stringstream ss (qa[i]); string query; string qf = qa[i]; string tag; string value; string result = ""; while (getline(ss, query , '.')){ }; replace(query.begin() , query.end() , '~' , ' '); replace(qf.begin() , qf.end() , '~' , ' '); stringstream ssQuery (query); stringstream ssf(qf); ssQuery>>tag>>value; ssf>>qf; for (int j = 0; j < tags.size(); j++) { if (tags[j].title == tag) { vector< pair<string , string> > m = tags[j].att; for (int k = 0; k < m.size(); k++) { if (m[k].first == value) { result = m[k].second; } } } } if (result != "" && tagsQuires[tag] == qf) { cout<<result<<endl; }else{ cout<<"Not Found!"<<endl; } } return 0;
}
Seems like cookies are disabled on this browser, please enable them to open this website
Attribute Parser
You are viewing a single comment's thread. Return to all comments →
class Tag { public:
};
int main(int argc, char const *argv[]) {
}