概述
链接:http://118.190.20.162/view.page?gpid=T71
思路: 按要求顺序写出n、m、p[i]、r[i]
接着每次输入一行匹配
将匹配的两个字符串进行切割,存入数组,逐一比对,符合要求就输出
题目本身不难吧,觉得复杂,不敢做,一点一点想清楚也挺舒服的,具体看代码吧,写了注释
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <algorithm> using namespace std; string p[150],r[150]; void split(vector<string> &v, string s) { //cout<<"s:"<<s<<endl; string ss; v.clear(); for(int i=1;i<s.size();i++) { //cout<<"ss:"<<ss<<endl; if(s[i]=='/') { v.push_back(ss); ss.clear(); } else ss+=s[i]; } if(ss.size()) v.push_back(ss); // for(vector<string>::iterator it=v.begin();it!=v.end();it++) // cout<<*it<<endl; } string judge(string s) { int t=0; for(int i=0;i<s.size();i++) { if(s[i]<'0'||s[i]>'9') { t=1; break; } } if(t==1) return "<str>"; else return "<int>"; } vector<string> ans; bool match(string s1,string s2)//s1是规则,s2是要对比的 { ans.clear();//每次将存储答案的数组清零 vector<string> r1,m1; int l=1; split(r1,s1);//切割字符串 split(m1,s2);//r1是规则,m1是查询字符串数组 //cout<<r1.size()<<endl<<m1.size()<<endl; if(r1.size()>m1.size())// return false; if(r1.size()<m1.size()&&r1.size()>=1) if(r1[r1.size()-1]!="<path>") return false; if(r1.size()==0&&m1.size()!=0) return false; for(int i=0;i<r1.size();i++) { //cout<<r1[i]<<endl; if(r1[i]==m1[i]) { l=l+m1[i].size()+1; continue; } else if(r1[i]=="<path>") { ans.push_back(s2.substr(l,s2.size()-l)); return true; } else if(r1[i]==judge(m1[i])) { ans.push_back(m1[i]); l=l+m1[i].size()+1; } else return false; } if(s1[s1.size()-1]=='/'&&s2[s2.size()-1]!='/') return false; if(s1[s1.size()-1]!='/'&&s2[s2.size()-1]=='/') return false; return true; } int convert(string s) { int ans=0; for(int i=0;i<s.size();i++) { ans=ans*10+(s[i]-'0'); } return ans; } int main() { int n,m; string s; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { cin>>p[i]>>r[i]; } for(int i=0;i<m;i++) { cin>>s; int flag=0; int j; for(j=0;j<n;j++) { flag=match(p[j],s);//将输入的s和前面n个规则比对 if(flag) break; } if(flag==0) { cout<<404<<endl; continue; } cout<<r[j]; for(int k=0;k<ans.size();k++) { if(judge(ans[k])=="<int>") cout<<" "<<convert(ans[k]); else cout<<" "<<ans[k]; } cout<<endl; } return 0; }
转载于:https://www.cnblogs.com/Rysort/p/9610741.html
最后
以上就是纯情金毛为你收集整理的CCF201803-3-URL映射的全部内容,希望文章能够帮你解决CCF201803-3-URL映射所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复