分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

201803-3 URL映射(50)

发布时间:2023-09-06 02:08责任编辑:傅花花关键词:暂无标签
#include<bits/stdc++.h>using namespace std;const int maxn = 100 + 3;const int maxm = 100 + 3;int n, m;struct Node{ ???string s; ???string name; ???vector<Node*>next;};Node root;void dfs(Node* u){ ???if(u->name != "") cout << u->name; ???cout << u->s << ‘ ‘; ???for(int i = 0; i < u->next.size(); i++) ???????dfs(u->next[i]);}void addNode(string s1, string s2){ ???vector<string>ss1; ???int last = 0; ???for(int i = 1; i < s1.size(); i++){ ???????if(s1[i] == ‘/‘){ ???????????ss1.push_back(s1.substr(last + 1, i - last - 1)); ???????????last = i; ???????}else if(i == s1.size() - 1){ ???????????ss1.push_back(s1.substr(last + 1, i - last)); ???????} ???}// ???for(string s : ss1)// ???????cout << s << endl; ???Node* u = &root; ???for(int i = 0; i < ss1.size(); i++){ ???????bool ok = 0; ???????for(int j = 0; j < u->next.size(); j++){ ???????????if(u->next[j]->s == ss1[i]){ ???????????????u = u->next[j]; ???????????????ok = 1; ???????????????break; ???????????} ???????} ???????if(!ok){ ???????????Node* p = new Node(); p->s = ss1[i]; ???????????if(i == ss1.size() - 1) p->name = s2; ???????????u->next.push_back(p); ???????????u = p; ???????} ???} ???//dfs(&root);}bool match(string pattern, string& text) //同时去掉前导0{ ???if(pattern == "<path>") return true; ???if(pattern[0] != ‘<‘) return pattern == text; ???bool isnum = true; ???for(int i = 0; i < text.size(); i++){ ???????if(!isdigit(text[i])){ ???????????isnum = false; ???????????break; ???????} ???} ???if(isnum){ ????????//cout << "fffffffffffffffffffff" << text << endl; ???????int i = 0; ???????while(text[i] == ‘0‘) i++; ???????text.erase(0, i); ???????//cout << "fffffffffffffffffffff" << text << endl; ???????return pattern == "<int>"; ???} ???return pattern == "<str>";}void solve(string s1){ ???vector<string>ss1; ???int last = 0; ???for(int i = 1; i < s1.size(); i++){ ???????if(s1[i] == ‘/‘){ ???????????ss1.push_back(s1.substr(last + 1, i - last - 1)); ???????????last = i; ???????}else if(i == s1.size() - 1){ ???????????ss1.push_back(s1.substr(last + 1, i - last)); ???????} ???} ???vector<string>args; ???string name; ???Node* u = &root; ???int OK = true; ???int path = 0; ???for(int i = 0; i < ss1.size(); i++){ ???????string& s = ss1[i]; ???????int ok = 0; ???????for(int j = 0; j < u->next.size(); j++){ ???????????if(match(u->next[j]->s, s)){ ???????????????if(u->next[j]->s == "<path>"){ ???????????????????for(int k = i; k < ss1.size(); k++){ ???????????????????????if(args.size() == 0) args.push_back(""); ???????????????????????args[args.size() - 1] += (k == i ? "" : "/") + ss1[k]; ???????????????????} ???????????????????name = u->next[j]->name; ???????????????????path = 1; ???????????????????break; ???????????????} ???????????????if(i == ss1.size() - 1){ ???????????????????if(u->next[j]->name != ""){ ???????????????????????name = u->next[j]->name; ???????????????????????ok = 1; ???????????????????} ???????????????} else ok = 1; ???????????????if(u->next[j]->s[0] == ‘<‘) args.push_back(s); ???????????????u = u->next[j]; ???????????????break; ???????????} ???????} ???????if(path) break; ???????if(!ok){ ???????????OK = false; ???????} ???} ???if(!OK) cout << "404" << endl; ???else{ ???????cout << name; ???????for(int i = 0; i < args.size(); i++) ???????????cout << ‘ ‘ << args[i]; ???????cout << endl; ???}}int main(){ ???//freopen("in.txt", "r", stdin); ???//freopen("out.txt", "w", stdout); ???while(cin >> n >> m && n){ ???????root.s = "/"; ???????for(int i = 0; i < n; i++){ ???????????string s1, s2; ???????????cin >> s1 >> s2; ???????????addNode(s1, s2); ???????} ???????for(int i = 0; i < m; i++){ ???????????string s; cin >> s; ???????????solve(s); ???????} ???????//dfs(&root); ???} ???return 0;}
View Code

201803-3URL映射(50)

原文地址:https://www.cnblogs.com/sanshi-2018/p/10548335.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved