果然正则表达式是一个强大的工具

更短的代码....hhh

版本1: 正则表达式..so easy~~

 #include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <regex>
using namespace std;
const int N = ;
const string s_int = "([0-9]+)";
const string s_str = "([0-9A-Za-z-_\.]+)";
const string s_path = "([0-9A-Za-z-_\./]+)";
string rule[N], na[N];
vector <int> p[N]; // 表示匹配项类型 1-int;2-str;3-path
int n, m;
smatch sm;
string _deal(string str, int k) {// 将"int"->s_int'... 变成正则表达式的情况
string ans;
for (int i = ; i < str.size(); i++) {
if (str[i] == '<') {
string tmp; i++;
while (str[i] != '>')
tmp.push_back(str[i++]);
if (tmp == "int") { ans += s_int; p[k].push_back(); }
else if (tmp == "str") { ans += s_str; p[k].push_back(); }
else { ans += s_path; p[k].push_back(); }
}
else ans.push_back(str[i]);
}
return ans;
}
int main()
{
cin >> n >> m;
for (int i = ; i <= n; i++) {
string s1;
cin >> s1 >> na[i];
rule[i] = _deal(s1, i);
}
for (int i = ; i <= m; i++) {
string str; cin >> str;
string ans = ""; int k = ;
for (; k <= n; k++) {
regex re(rule[k]);
if (regex_match(str,sm,re)) {
ans = na[k];
break;
}
}
cout << ans;
if (ans != "")
for (int j = ; j < p[k].size(); j++) {
if (p[k][j] == ) cout << " " <<stoi(sm[j+]);
else cout << " " << sm[j+];
}
cout << "\n";
}
//system("pause");
return ;

版本2: split() 用/来分割字符串  [以前写的 好复杂啊

 #include <bits/stdc++.h>
using namespace std;
vector <string> name();
vector < vector <string> > rule();
vector <string> ans;
bool wei[];
bool isdight (char x) {
return x>=''&&x<='';
}
bool ischar (char x) {
if (isdight(x) )
return true;
if ( (x>='A' && x<='Z') || (x>='a' && x<='z') )
return true;
if ( x=='/' || x=='-' || x=='_' || x=='.')
return true;
return false;
}
vector <string> split (const string& str,const char flag=' ') {
istringstream iss(str);
vector <string> sv;
string tmp;
while (getline(iss,tmp,flag))
sv.push_back(tmp);
return sv;
}
bool isok (string str) {
if (str[]!='/') return ;
for (int i=;i<str.size();i++) {
if (!ischar(str[i]))
return ;
}
return ; }
string dtoc (int x) {
string str;
if (x==) return "";
while (x) {
str+=x%+'';
x/=;
}
reverse(str.begin(),str.end());
return str;
}
bool ismatch (int k, string str) {
bool flag=;
ans.clear();
if (str[str.size()-]=='/') flag=;
vector <string> sv=split (str,'/'); for (int i=;i<rule[k].size();i++) {
if (i>=sv.size()) return ;
int len=sv[i].size();
if (rule[k][i]=="<int>") {
int sum=;
for (int j=;j<len;j++) {
if (!isdight(sv[i][j])) return ;
sum=sum*+sv[i][j]-'';
}
ans.push_back(dtoc(sum));
} else if (rule[k][i]=="<str>")
ans.push_back(sv[i]); else if (rule[k][i]=="<path>") {
string tmp;
for (int k=i;k<sv.size();k++) {
tmp+=sv[k];
if (k==sv.size()-&&!flag) continue;
tmp+="/";
}
ans.push_back(tmp);
return ;
} else {
if (sv[i]!=rule[k][i]) return ;
} }
if (rule[k].size()==sv.size()&&(flag==wei[k])) return ; // 真的是傻逼
else return ;
}
int n,m;
int main ()
{
cin>>n>>m; getchar();
string s1,s2;
for (int i=;i<=n;i++) {
cin>>s1>>s2; getchar();
name[i]=s2;
if (s1[s1.size()-]=='/') wei[i]=;// 没有考虑的地方
rule[i]=split(s1,'/');
}
for (int i=;i<=m;i++) {
getline (cin,s1); int x=;
if (isok(s1)) {
for (int j=;j<=n;j++)
if (ismatch(j,s1)) {
x=j;
break;
}
}
if (x==) cout<<""<<endl;
else {
cout<<name[x];
for (int j=;j<ans.size();j++)
cout<<" "<<ans[j];
cout<<endl;
}
}
return ;
}

CCF-URL映射-(正则匹配)-20180303的更多相关文章

  1. Django2.0以上版本的URL的正则匹配问题

    正则表达式形式的URL匹配问题: 1.导入re_path from django.urls import path,re_path 2.进行正则匹配 re_path('detail-(\d+).htm ...

  2. CCF(URL映射:80分):字符串处理+模拟

    URL映射 CCF201803-3 #include<iostream> #include<cstdio> #include<cstring> #include&l ...

  3. 基于URL的正则匹配

    第一种的方式使用( <li><a target="_blank" href="/CC/detail/?nid={{ k}}">{{ ro ...

  4. SpringMvc如何将Url 映射到 RequestMapping (二)

    昨天简单分析了Springmvc 中 RequestMapping 配置的url和请求url之间的匹配规则.今天详细的跟踪一下一个请求url如何映射到Controller的对应方法上 一.入口 org ...

  5. CCF 201803-3 URL映射

    CCF 201803-3  URL映射 试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django. ...

  6. 正则匹配之url的匹配

    通过这几天的学习,已经对正则有所了解了. 下面动手写一个匹配url的正则吧. <?php $str="http://www.baidu.com"; $reg="/( ...

  7. js:通过正则匹配获取页面的url中的参数

    简介:获取页面参数 原生js: //通过正则匹配获取当前页面的url中的参数 function getUrlParam(name){ var reg = new RegExp("(^|&am ...

  8. Django2.0版本 path与Django1.x版本url正则匹配问题

    Django1.x版本url正则匹配如下: Django2.0版本正则匹配则要导入re_path模块如下:

  9. CCF CSP 201803-3 URL映射

    转载自 https://blog.csdn.net/tigerisland45/article/details/81697594 /* CCF201803-3 URL映射 */ #include &l ...

随机推荐

  1. freeswqitch odbc

    1.安装驱动 yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel -y yum install mysql-conn ...

  2. 【BZOJ1485】有趣的数列

    Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…&l ...

  3. [转载]C++之路起航——标准模板库(deque)

    转自:https://www.cnblogs.com/grhyxzc/p/5074061.html deque(双端队列):http://baike.baidu.com/link?url=JTvA2c ...

  4. K8S中如何跨namespace 访问服务?为什么ping不通ClusterIP?

    1.K8S中如何跨namespace 访问服务? 2.在Pod中为什么ping不通ClusterIP? 简述: Rancher2.0中的一个用户,在K8S环境中,创建两个namespace,对应用进行 ...

  5. JxBrowser之二:常用函数addLoadListener

    1.常用函数addLoadListener,包含对页面加载状态的多种监控回调. browser.addLoadListener(new LoadAdapter() { @Override public ...

  6. 『TensorFlow』读书笔记_SoftMax分类器

    开坑之前 今年3.4月份的时候就买了这本书,同时还买了另外一本更为浅显的书,当时读不懂这本,所以一度以为这本书很一般,前些日子看见知乎有人推荐它,也就拿出来翻翻看,发现写的的确蛮好,只是稍微深一点,当 ...

  7. 『TensorFlow』读书笔记_AlexNet

    网络结构 创新点 Relu激活函数:效果好于sigmoid,且解决了梯度弥散问题 Dropout层:Alexnet验证了dropout层的效果 重叠的最大池化:此前以平均池化为主,最大池化避免了平均池 ...

  8. RABC --权限控制解读

    一.基于RBAC的概念介绍 1.RBAC(Role-Based Access Control )基于角色的访问控制. 2.RBAC认为权限的过程可以抽象概括为:判断[Who是否可以对What进行How ...

  9. 如何seo(搜索引擎优化)

    Seo是指遵循搜索引擎的搜索原则,对网站结构.网页文字语言和站点间互动外交等进行合理规划部署,以改善网站在搜索引擎的搜索表现,从而增加客户发现并访问网站的可能性的一个过程.

  10. echarts和highcharts比较

    echarts底层为canvas,highcharts底层为svg canvas特点: ①依赖分辨率 ②不支持事件处理器 ③弱的文本渲染能力 ④能够以.jpg..png格式保存结果图像 ⑤最适合图像密 ...