我是靠谱客的博主 昏睡歌曲,最近开发中收集的这篇文章主要介绍CCF 201803-3 URL映射,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

原文链接

我的个人博客

原题链接

URL映射

思路

用p数组存放所有的url匹配规则,r数组记录匹配的名称。对于每一个需要进行判读的url路径,将其与所有的p数组中的字符串进行比较。一旦有符合的就输出。

代码

#include <bits/stdc++.h>
using namespace std;

const int N = 100;
string p[N], r[N], s;

//判读s是否符合t的匹配规则 
bool match(string& s, string& t, bool flag){
	int lent = t.size();
	int lens = s.size();
	int ps=0,pt=0;
	while(ps < lens && pt < lent){
		if(t[pt] == s[ps]){
			pt++;
			ps++;
		}else{
			//去匹配<xxx>
			if(t[pt++] != '<'){
				return false; 
			} 
			if(flag) cout<<" ";
			
			bool ok = false;
			if(t[pt] == 'i'){
				//匹配的是<int>
				while(s[ps] && isdigit(s[ps])){
					if(s[ps] != '0')
						ok = true;
					if(flag && ok){
						cout<<s[ps];
					}
					ps++;
				}
				if(!ok){
					return false;//不能匹配<int> 
				} 
				pt += 4; 
			}else if(t[pt] == 's'){
				//匹配的是<str>
				bool ok = false;
				while(s[ps] && s[ps]!='/'){
					ok = true;
					if(flag){
						cout<<s[ps];
					}
					ps++;
				} 
				if(!ok){
					return false;
				}
				pt += 4;
			}else if(t[pt] == 'p'){
				//匹配的是<path>
				//不管是什么,path一定是符合的 
				if(flag){
					while(s[ps]){
						cout<<s[ps++];
					}
				} 
				return true;
			} 
		}
	} 
	return pt==lent && ps == lens;
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++){
		cin>>p[i]>>r[i];//输入匹配的规则和 名字 
	}
	for(int i=0;i<m;i++){
		cin>>s;//输入要处理的字符串
		bool flag = true;//表示是否找到
		for(int j=0;flag&&j<n;j++){
			if(match(s,p[j],false)){
				//与某个规则匹配
				flag = false;
				cout<<r[j];
				match(s,p[j],true);//输出结果 
			}
		} 
		if(flag){
			cout<<"404";//表示未找到 
		} 
		cout<<endl; 
	} 
	return 0;
}

最后

以上就是昏睡歌曲为你收集整理的CCF 201803-3 URL映射的全部内容,希望文章能够帮你解决CCF 201803-3 URL映射所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部