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(node{1,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(node{2,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(node{3,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;
}

原文地址:https://www.cnblogs.com/GarrettWale/p/11443552.html

时间: 2024-10-09 14:13:23

CCF(URL映射:80分):字符串处理+模拟的相关文章

url映射 ccf (Java正则表达式解法)

问题描述 试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件.对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 URL 地址,并将其分派给相应的处理代码.现在,请你来实现一个简单的 URL 映射功能. 本题中 URL 映射功能的配置由若干条 URL 映射规则组成.当一个请求到达时,U

PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)

PTA数据结构与算法题目集(中文)  7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数(将关键字Key中的最后3个字符映射为整数,每个字符占5位:再用除留余数法将整数映射到长度为P的散列表中.例如将字符串AZDEG插入长度为1009的散列表中,我们首先将26个大写英文字母顺序映射到整数0~25:再通过移位将其映射为3:然后根据表长得到,即是该字符串的散列映射位置. 发生冲突时请

ASP.NET MVC 5 Web编程2 -- URL映射(路由原理)

本章将讲述ASP.NET MVC5 的路由原理,即URL映射机制. 简单点就是解释:为什么MVC在浏览器输入地址就能访问到类(或类中的方法)?这是怎么做到的?我自己可以通过.NET写出一个自己的MVC框架吗? 答案是:可以. 模拟URL映射 先来看一个Demo,在传统的.NET WebForms项目中,实现URL的拦截. 打开VS2013,新建一个“ASP.NET Web窗体应用程序”项目,并取名为Demo4URLRouting. 为了方便测试,注释掉Default.aspx页面的内容和模板引用

201803-3 URL映射

问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件.对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 URL 地址,并将其分派给相应的处理代码.现在,请你来实现一个简单的 URL 映射功能. 本题中 URL 映射功能的配置由若干条 URL 映射规则组成.当一个请求到达时,URL 映射功能会将请求中的 URL 地址按照配置的先后顺序逐一与这些规则进行匹配.当遇到第一条完全匹配的规则时,匹配成功,得到

django中“url映射规则”和“服务端响应顺序”

1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单. 查看方式: import sys print sys.path 通常无需关心 Python 搜索路径的设置,Python 和 Django 会在后台自动帮你处理好. 2.url匹配模式  基本结构: '^需要匹配的url字符串$' PS:实际上最终完整的url串是http://根路径:端口号/需要匹配的url字符串 系统自动添加的部分'http://根路径:端口号/' eg:url匹配模式:'^lates

Django之url映射

url映射的作用 根据Django的MTV模式,url的映射是根据用户输入或传送而来的url路径,来进行区分去执行相应的view函数来响应用户的操作. url映射的方式 Django项目的创建后,会自动创建和你项目名称相同的全局文件包,urls.py就在其中. urlpatterns = [ path('admin/', admin.site.urls), ] 这是Django自动添加的一条映射.我们的view函数在自己创建的app中,所以需要先引入app文件包中的views from blog

用一条SQL语句查出每门课都大于80分的学生的姓名

用一条sql语句查询出所有课程都大于80分的学生名单: name cource score 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90 1 SET FOREIGN_KEY_CHECKS=0; 2 3 -- ---------------------------- 4 -- Table structure for grade 5 -- ---------------------------- 6 DROP TABL

[关于SQL]查询成绩都大于80分的学生

1.用一条SQL语句 查询出每门课都大于80分的学生姓名name kecheng fenshu张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100王五 英语 90 CREATE TABLE [dbo].[chengji]( [name] [nvarchar](50) NULL, [kecheng] [nvarchar](50) NULL, [fenshu] [int] NULL ) ON [PRIMARY] GO INSERT [dbo].[chen

urlMappings与URL映射

此配置节的作用就是往Web程序中添加URL的映射,从而达到用户访问映射后的URL(如/Page/AAA)也能访问到源URL(如/Page/PageAAA.aspx)的效果.这也是URL映射本来的作用. 详细配置如下 其中要启用这个URL映射的必须要把enabled设置成true,add和remove的url都是映射后的URL. 最开始鄙人是在WebForm中尝试,结果是成功的:然后担心在MVC下已经废弃了,最开始可能是某些原因导致映射不了,直接说找不到URL,后来估计打断点查看一下两个应用程序(