CCF(URL映射:80分):字符串处理+模拟
Posted garrettwale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF(URL映射:80分):字符串处理+模拟相关的知识,希望对你有一定的参考价值。
URL映射
CCF201803-3
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<sstream>
#include<map>
#include<queue>
using namespace std;
const int maxn=101;
const int maxm=101;
string s[maxn];
// 字符串 <str>:用于匹配一段字符串,注意字符串里不能包含斜杠。例如,abcde0123。
// 整数 <int>:用于匹配一个不带符号的整数,全部由阿拉伯数字组成。例如,01234。
// 路径 <path>:用于匹配一段字符串,字符串可以包含斜杠。例如,abcd/0123/。
struct node
int id;//1-int,2-str,3-path
string s;
;
vector<node> ve;
int n,m;
map<string,string>ma;
bool legal(char c)
return (c>='0'&&c<='9')||(c>='a'&&c<='z')||(c>='A'&&c<='Z')||c=='.'||c=='_'||c=='-';
int main()
cin>>n>>m;
for(int i=0;i<n;i++)
string name;
cin>>s[i]>>name;
ma[s[i]]=name;
for(int i=0;i<m;i++)
string t;
cin>>t;
bool flag=false;
for(int j=0;j<n;j++)
ve.clear();
string now=s[j];
bool flagsub=true;
int ks,kt;
for(ks=0,kt=0;ks<now.length()&&kt<t.length();)//k表示s[i]
if(now[ks]=='/'&&t[kt]=='/')
ks++,kt++;
continue;
if(now[ks]=='<')
string temp="";
while(now[++ks]!='>')
temp+=now[ks];
ks++;//--------------
if(temp=="int")
string ts="";
ts+=t[kt];
while(t[++kt]!='/')
ts+=t[kt];
if(t[kt]>'9'||t[kt]<'0')
flagsub=false;
break;
ve.push_back(node1,ts);
else if(temp=="str")
string ts="";
ts+=t[kt];
while(t[++kt]!='/')
ts+=t[kt];
if(!legal(t[kt]))
flagsub=false;
break;
ve.push_back(node2,ts);
else if(temp=="path")//是路径的话
string ts="";
ts+=t[kt];
while((++kt)!=t.length())
ts+=t[kt];
if(!legal(t[kt])&&t[kt]!='/')
flagsub=false;
break;
ve.push_back(node3,ts);
continue;
if(now[ks]==t[kt])
ks++,kt++;
continue;
if(now[ks]!=t[kt])
flagsub=false;
break;
if(ks<now.length()||kt<t.length())
flagsub=false;
if(flagsub)
flag=true;
cout<<ma[now];
for(int k=0;k<ve.size();k++)
if(ve[k].id==1)//数字
cout<<" ";
int ksb=0;
if(ve[k].s[0]=='0')
ksb++;
for(;ksb<ve[k].s.length();ksb++)
cout<<ve[k].s[ksb];
else
cout<<" "<<ve[k].s;
cout<<endl;
break;
if(!flag)
cout<<404<<endl;
return 0;
以上是关于CCF(URL映射:80分):字符串处理+模拟的主要内容,如果未能解决你的问题,请参考以下文章