201803-3 URL映射 100

60

#include<bits/stdc++.h>
using namespace std;
int n,m;
char p[110][110];
char quest[110];
int Correct(char * a, char * pp){
	char p[110];
	int ppos=0;
	for( ppos=0;pp[ppos]!='\0';ppos++){
		p[ppos]=pp[ppos];
	}
	p[ppos]='\0';
	//保存参数以免被更改 
	
	char* pattern=strtok(p," ");
	string Pattern(pattern);
	char* name=strtok(NULL," ");
	//p已被更改 
	string Name(name);
	string Aa(a); 
	vector <string> Pt,A;
		
	if( Pattern.find("<path>")!=string::npos ){//有路径的,最后没有斜杠 
		if(Aa[Aa.length()-1]=='/')return 0;//最后一个是斜杠,证明非路径,不匹配 
		char * temp0= (char*)Pattern.c_str();
		char* temp=strtok(temp0,"/");
		string Temp(temp);
		Pt.push_back(Temp);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     Pt.push_back(Temp1);
	    }
	    //处理模式串,结果保存在Pt中 
	    
	    temp0= (char*)Aa.c_str();
		temp=strtok(temp0,"/");
		string Temp3(temp);
		A.push_back(Temp3);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     A.push_back(Temp1);
	    }

	    //处理查询串,结果保存在A中 
	    for(int i=0;i<Pt.size();i++){
	    	if(Pt[i].compare(A[i])==0){
	    		continue;
			}
			else{
				if(i==(Pt.size()-1)){
					cout<<Name<<" ";
					cout<<A[i];
					for(int j=i+1;j<A.size();j++)
					cout<<"/"<<A[j]; 
					return 1;
				}
				else{
					return 0;
				}
			}
		}
	}
	else if( Pattern.find("<")==string::npos ){//没有正则的,直接匹配 
		if( Pattern.compare(Aa)==0 ){
			cout<<Name<<endl;
			return 1;
		}
		else return 0;
	}
	else{//int 和str匹配 
		char * temp0= (char*)Pattern.c_str();
		char* temp=strtok(temp0,"/");
		string Temp(temp);
		Pt.push_back(Temp);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     Pt.push_back(Temp1);
	    }
	    //处理模式串,结果保存在Pt中 

	    temp0= (char*)Aa.c_str();
		temp=strtok(temp0,"/");
		string Temp3(temp);
		A.push_back(Temp3);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     A.push_back(Temp1);
	    }
	    //处理查询串,结果保存在A中 
	    if(Pt.size()!=A.size())
	    return 0;
	    
	    vector <int> Int;
	    for(int i=0;i<Pt.size();i++){
	    	if(Pt[i].find("<")==string::npos){//直接匹配的字符 
	    		if(Pt[i].compare(A[i])!=0){
	    			return 0;
				} 
				else {
					continue;
				}
			}
			else{
				if(Pt[i].compare("<int>")==0){
					int inttemp=0;
					for(int nt=0;nt<A[i].length();nt++){
						if(A[i][nt]>='0'&&A[i][nt]<='9'){
							inttemp*=10;
							inttemp+=A[i][nt]-'0';
						}
						else{
							return 0;
						} 
					}
					Int.push_back(inttemp);
				}
				else{
					continue;
				}
			}
		}
		cout<<Name<<" ";
		int num=0;
		for(int i=0;i<Pt.size();i++){
			if(Pt[i].compare("<int>")==0){
				cout<<" "<<Int[num++];
				continue;
			}
			if(Pt[i].compare("<str>")==0){
				cout<<" "<<A[i];
				continue;
			}
		}
		cout<<endl;
	    return 1;
	}
	//无匹配
	return 0; 
}
void Query(char *a){
	int sum=0;
	for(int i=0;i<n;i++){
	    sum+=Correct(a,p[i]);
	}
	if(sum==0)
	    cout<<"404"<<endl;
    return ;
}
int main(){
	cin>>n>>m;
	char ctemp;
	cin.get(ctemp);
	char intemp[110]; 
	for(int i=0;i<n;i++){
		cin.getline(p[i],110);
	}
	for(int i=0;i<m;i++){
		cin.getline(quest,110);
		Query(quest);
	}
    return 0;
}

90 只匹配第一个就可以,不用输出全部

#include<bits/stdc++.h>
using namespace std;
int n,m;
char p[110][110];
char quest[110];
int Correct(char * a, char * pp){
	char p[110];
	int ppos=0;
	for( ppos=0;pp[ppos]!='\0';ppos++){
		p[ppos]=pp[ppos];
	}
	p[ppos]='\0';
	//保存参数以免被更改 
	
	char* pattern=strtok(p," ");
	string Pattern(pattern);
	char* name=strtok(NULL," ");
	//p已被更改 
	string Name(name);
	string Aa(a); 
	vector <string> Pt,A;
	if(Pattern[Pattern.length()-1]=='/'&&Aa[Aa.length()-1]!='/'||Pattern[Pattern.length()-1]!='/'&&Aa[Aa.length()-1]=='/')
	return 0;
	/* 
	if( Pattern.find("<path>")!=string::npos ){//有路径的,最后没有斜杠 
		//if(Aa[Aa.length()-1]=='/')return 0;//最后一个是斜杠,证明非路径,不匹配 
		char * temp0= (char*)Pattern.c_str();
		char* temp=strtok(temp0,"/");
		string Temp(temp);
		Pt.push_back(Temp);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     Pt.push_back(Temp1);
	    }
	    //处理模式串,结果保存在Pt中 
	    
	    temp0= (char*)Aa.c_str();
		temp=strtok(temp0,"/");
		string Temp3(temp);
		A.push_back(Temp3);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     A.push_back(Temp1);
	    }

	    //处理查询串,结果保存在A中 
	    for(int i=0;i<Pt.size();i++){
	    	if(Pt[i].compare(A[i])==0){
	    		continue;
			}
			else{
				if(i==(Pt.size()-1)){
					cout<<Name<<" ";
					cout<<A[i];
					for(int j=i+1;j<A.size();j++)
					cout<<"/"<<A[j]; 
					return 1;
				}
				else{
					return 0;
				}
			}
		}
	}
	*/
	if( Pattern.find("<")==string::npos ){//没有正则的,直接匹配 
		if( Pattern.compare(Aa)==0 ){
			cout<<Name<<endl;
			return 1;
		}
		else return 0;
	}
	else{//int 和str匹配 
		char * temp0= (char*)Pattern.c_str();
		char* temp=strtok(temp0,"/");
		string Temp(temp);
		Pt.push_back(Temp);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     Pt.push_back(Temp1);
	    }
	    //处理模式串,结果保存在Pt中 

	    temp0= (char*)Aa.c_str();
		temp=strtok(temp0,"/");
		string Temp3(temp);
		A.push_back(Temp3);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     A.push_back(Temp1);
	    }
	    //处理查询串,结果保存在A中 
	    if((Pattern.find("<path>")==string::npos)&&(Pt.size()!=A.size()))
	    return 0;
	    
	    vector <int> Int;
	    for(int i=0;i<Pt.size();i++){
	    	if(Pt[i].find("<")==string::npos){//直接匹配的字符 
	    		if(Pt[i].compare(A[i])!=0){
	    			return 0;
				} 
				else {
					continue;
				}
			}
			else{
				if(Pt[i].compare("<int>")==0){
					int inttemp=0;
					for(int nt=0;nt<A[i].length();nt++){
						if(A[i][nt]>='0'&&A[i][nt]<='9'){
							inttemp*=10;
							inttemp+=A[i][nt]-'0';
						}
						else{
							return 0;
						} 
					}
					Int.push_back(inttemp);
				}
				else if(Pt[i].compare("<str>")==0){
					continue;
				}
				else if(Pt[i].compare("<path>")==0){
					break;
				}
				else{
					
				}
			}
		}
		cout<<Name<<" ";
		int num=0;
		for(int i=0;i<Pt.size();i++){
			if(Pt[i].compare("<int>")==0){
				cout<<" "<<Int[num++];
				continue;
			}
			if(Pt[i].compare("<str>")==0){
				cout<<" "<<A[i];
				continue;
			}
			if(Pt[i].compare("<path>")==0){
					cout<<A[i];
					for(int j=i+1;j<A.size();j++)
					cout<<"/"<<A[j]; 
					cout<<endl;
					return 1;
			}
		}
		cout<<endl;
	    return 1;
	}
	//无匹配
	return 0; 
}
void Query(char *a){
	int sum=0;
	for(int i=0;i<n;i++){
	    sum+=Correct(a,p[i]);
	    if(sum!=0)
	    break;
	}
	if(sum==0)
	    cout<<"404"<<endl;
    return ;
}
int main(){
	cin>>n>>m;
	char ctemp;
	cin.get(ctemp);
	char intemp[110]; 
	for(int i=0;i<n;i++){
		cin.getline(p[i],110);
	}
	for(int i=0;i<m;i++){
		cin.getline(quest,110);
		Query(quest);
	}
    return 0;
}

90 结尾斜杠的处理

#include<bits/stdc++.h>
using namespace std;
int n,m;
char p[110][110];
char quest[110];
int Correct(char * aa, char * pp){
	char p[110];
	int ppos=0;
	for( ppos=0;pp[ppos]!='\0';ppos++){
		p[ppos]=pp[ppos];
	}
	p[ppos]='\0';
	//保存参数以免被更改 
	char a[110];
	for( ppos=0;aa[ppos]!='\0';ppos++){
		a[ppos]=aa[ppos];
	}
	a[ppos]='\0';
	char* pattern=strtok(p," ");
	string Pattern(pattern);
	char* name=strtok(NULL," ");
	//p已被更改 
	string Name(name);
	string Aa(aa); 
	vector <string> Pt,A;
	if(Aa[Aa.length()-1]=='/'){
		if(Pattern[Pattern.length()-1]=='/'||Pattern[Pattern.length()-1]=='>'&&Pattern[Pattern.length()-2]=='h')
		{	
		}
		else{
			return 0;
		}
	}
	else{
		if(Pattern[Pattern.length()-1]!='/'||Pattern[Pattern.length()-1]=='>'&&Pattern[Pattern.length()-2]=='h')
		{	
		}
		else{
			return 0;
		}
	}
	/* 
	if( Pattern.find("<path>")!=string::npos ){//有路径的,最后没有斜杠 
		//if(Aa[Aa.length()-1]=='/')return 0;//最后一个是斜杠,证明非路径,不匹配 
		char * temp0= (char*)Pattern.c_str();
		char* temp=strtok(temp0,"/");
		string Temp(temp);
		Pt.push_back(Temp);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     Pt.push_back(Temp1);
	    }
	    //处理模式串,结果保存在Pt中 
	    
	    temp0= (char*)Aa.c_str();
		temp=strtok(temp0,"/");
		string Temp3(temp);
		A.push_back(Temp3);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     A.push_back(Temp1);
	    }

	    //处理查询串,结果保存在A中 
	    for(int i=0;i<Pt.size();i++){
	    	if(Pt[i].compare(A[i])==0){
	    		continue;
			}
			else{
				if(i==(Pt.size()-1)){
					cout<<Name<<" ";
					cout<<A[i];
					for(int j=i+1;j<A.size();j++)
					cout<<"/"<<A[j]; 
					return 1;
				}
				else{
					return 0;
				}
			}
		}
	}
	*/
	if( Pattern.find("<")==string::npos ){//没有正则的,直接匹配 
		if( Pattern.compare(Aa)==0 ){
			cout<<Name<<endl;
			return 1;
		}
		else return 0;
	}
	else{//int 和str匹配 
	    string PP=Pattern;
		char * temp0= (char*)PP.c_str();
		char* temp=strtok(temp0,"/");
		string Temp(temp);
		Pt.push_back(Temp);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     Pt.push_back(Temp1);
	    }
	    //处理模式串,结果保存在Pt中 
	    string AA=Aa;
	    temp0= (char*)AA.c_str();
		temp=strtok(temp0,"/");
		string Temp3(temp);
		A.push_back(Temp3);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     A.push_back(Temp1);
	    }
	    //处理查询串,结果保存在A中 
	    if((Pattern.find("<path>")==string::npos)&&(Pt.size()!=A.size()))
	    return 0;
	    
	    vector <int> Int;
	    for(int i=0;i<Pt.size();i++){
	    	if(Pt[i].find("<")==string::npos){//直接匹配的字符 
	    		if(Pt[i].compare(A[i])!=0){
	    			return 0;
				} 
				else {
					continue;
				}
			}
			else{
				if(Pt[i].compare("<int>")==0){
					int inttemp=0;
					for(int nt=0;nt<A[i].length();nt++){
						if(A[i][nt]>='0'&&A[i][nt]<='9'){
							inttemp*=10;
							inttemp+=A[i][nt]-'0';
						}
						else{
							return 0;
						} 
					}
					Int.push_back(inttemp);
				}
				else if(Pt[i].compare("<str>")==0){
					continue;
				}
				else if(Pt[i].compare("<path>")==0){
					break;
				}
				else{
					
				}
			}
		}
		cout<<Name<<" ";
		int num=0;
		for(int i=0;i<Pt.size();i++){
			if(Pt[i].compare("<int>")==0){
				cout<<" "<<Int[num++];
				continue;
			}
			if(Pt[i].compare("<str>")==0){
				cout<<" "<<A[i];
				continue;
			}
			if(Pt[i].compare("<path>")==0){
					cout<<A[i];
					for(int j=i+1;j<A.size();j++)
					       cout<<"/"<<A[j]; 
					if(Aa[Aa.length()-1]=='/')
				      	cout<<"/";
					cout<<endl;
					return 1;
			}
		}
		cout<<endl;
	    return 1;
	}
	//无匹配
	return 0; 
}
void Query(char *a){
	int sum=0;
	for(int i=0;i<n;i++){
	    sum+=Correct(a,p[i]);
	    if(sum!=0)
	    break;
	}
	if(sum==0)
	    cout<<"404"<<endl;
    return ;
}
int main(){
	cin>>n>>m;
	char ctemp;
	cin.get(ctemp);
	char intemp[110]; 
	for(int i=0;i<n;i++){
		cin.getline(p[i],110);
	}
	for(int i=0;i<m;i++){
		cin.getline(quest,110);
		Query(quest);
	}
    return 0;
}

100
非常感谢
https://blog.csdn.net/HNUCSEE_LJK/article/details/82599047
踩了很多坑才最终100分

#include<bits/stdc++.h>
using namespace std;
int n,m;
char p[110][110];
char quest[110];
int Correct(char * aa, char * pp){
	if(pp[0]=='/'&&pp[1]==' '){
		if(aa[0]=='/'&&aa[1]=='\0'){
			for(int i=2;pp[i]!='\0';i++){
				cout<<pp[i];
			}
			cout<<endl;
			return 1;
		}
		else
		return 0;
	}
	else{
		if(aa[0]=='/'&&aa[1]=='\0'){
			return 0;
		}
	}
	char p[110];
	int ppos=0;
	for( ppos=0;pp[ppos]!='\0';ppos++){
		p[ppos]=pp[ppos];
	}
	p[ppos]='\0';
	//保存参数以免被更改 
	char a[110];
	for( ppos=0;aa[ppos]!='\0';ppos++){
		a[ppos]=aa[ppos];
	}
	a[ppos]='\0';
	char* pattern=strtok(p," ");
	string Pattern(pattern);
	char* name=strtok(NULL," ");
	//p已被更改 
	string Name(name);
	string Aa(aa); 
	vector <string> Pt,A;
	if(Aa[Aa.length()-1]=='/'){
		if(Pattern[Pattern.length()-1]=='/'||Pattern[Pattern.length()-1]=='>'&&Pattern[Pattern.length()-2]=='h')
		{	
		}
		else{
			return 0;
		}
	}
	else{
		if(Pattern[Pattern.length()-1]!='/'||Pattern[Pattern.length()-1]=='>'&&Pattern[Pattern.length()-2]=='h')
		{	
		}
		else{
			return 0;
		}
	}
	/* 
	if( Pattern.find("<path>")!=string::npos ){//有路径的,最后没有斜杠 
		//if(Aa[Aa.length()-1]=='/')return 0;//最后一个是斜杠,证明非路径,不匹配 
		char * temp0= (char*)Pattern.c_str();
		char* temp=strtok(temp0,"/");
		string Temp(temp);
		Pt.push_back(Temp);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     Pt.push_back(Temp1);
	    }
	    //处理模式串,结果保存在Pt中 
	    
	    temp0= (char*)Aa.c_str();
		temp=strtok(temp0,"/");
		string Temp3(temp);
		A.push_back(Temp3);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     A.push_back(Temp1);
	    }

	    //处理查询串,结果保存在A中 
	    for(int i=0;i<Pt.size();i++){
	    	if(Pt[i].compare(A[i])==0){
	    		continue;
			}
			else{
				if(i==(Pt.size()-1)){
					cout<<Name<<" ";
					cout<<A[i];
					for(int j=i+1;j<A.size();j++)
					cout<<"/"<<A[j]; 
					return 1;
				}
				else{
					return 0;
				}
			}
		}
	}
	*/
	if( Pattern.find("<")==string::npos ){//没有正则的,直接匹配 
		if( Pattern.compare(Aa)==0 ){
			cout<<Name<<endl;
			return 1;
		}
		else return 0;
	}
	else{//int 和str匹配 
	    string PP=Pattern;
		char * temp0= (char*)PP.c_str();
		char* temp=strtok(temp0,"/");
		string Temp(temp);
		Pt.push_back(Temp);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     Pt.push_back(Temp1);
	    }
	    //处理模式串,结果保存在Pt中 
	    string AA=Aa;
	    temp0= (char*)AA.c_str();
		temp=strtok(temp0,"/");
		string Temp3(temp);
		A.push_back(Temp3);
		while(temp!=NULL){
		     temp=strtok(NULL,"/");
		     if(temp==NULL)
		     break;
		     string Temp1(temp);
		     A.push_back(Temp1);
	    }
	    //处理查询串,结果保存在A中 
	    if((Pattern.find("<path>")==string::npos)&&(Pt.size()!=A.size()))
	    return 0;
	    
	    vector <int> Int;
	    for(int i=0;i<Pt.size();i++){
	    	if(Pt[i].find("<")==string::npos){//直接匹配的字符 
	    		if(Pt[i].compare(A[i])!=0){
	    			return 0;
				} 
				else {
					continue;
				}
			}
			else{
				if(Pt[i].compare("<int>")==0){
					int inttemp=0;
					for(int nt=0;nt<A[i].length();nt++){
						if(A[i][nt]>='0'&&A[i][nt]<='9'){
							inttemp*=10;
							inttemp+=A[i][nt]-'0';
						}
						else{
							return 0;
						} 
					}
					Int.push_back(inttemp);
				}
				else if(Pt[i].compare("<str>")==0){
					continue;
				}
				else if(Pt[i].compare("<path>")==0){
					break;
				}
				else{
					
				}
			}
		}
		cout<<Name<<" ";
		int num=0;
		for(int i=0;i<Pt.size();i++){
			if(Pt[i].compare("<int>")==0){
				cout<<" "<<Int[num++];
				continue;
			}
			if(Pt[i].compare("<str>")==0){
				cout<<" "<<A[i];
				continue;
			}
			if(Pt[i].compare("<path>")==0){
					cout<<A[i];
					for(int j=i+1;j<A.size();j++)
					       cout<<"/"<<A[j]; 
					if(Aa[Aa.length()-1]=='/')
				      	cout<<"/";
					cout<<endl;
					return 1;
			}
		}
		cout<<endl;
	    return 1;
	}
	//无匹配
	return 0; 
}
void Query(char *a){
	int sum=0;
	for(int i=0;i<n;i++){
	    sum+=Correct(a,p[i]);
	    if(sum!=0)
	    break;
	}
	if(sum==0)
	    cout<<"404"<<endl;
    return ;
}
int main(){
	cin>>n>>m;
	char ctemp;
	cin.get(ctemp);
	char intemp[110]; 
	for(int i=0;i<n;i++){
		cin.getline(p[i],110);
	}
	for(int i=0;i<m;i++){
		cin.getline(quest,110);
		Query(quest);
	}
    return 0;
}
/*
7 7
/articles/2003/ special_case_2003
/articles/<int> year_archive_1
/articles/<int>/<int>/ month_archive
/articles/<int>/<int>/<str>/ article_detail
/static/<path> static_serve
/a const_string
/ empty
/articles/2004/
/articles/2004/06
/articles/1985/09/aloha/
/articles/hello/
/static/js/jquery.js
/a
/

*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值