概述
交了整整20遍终于过了,题目意思不清楚真的非常坑
题目思路:
1.先记录下规则末尾是不是'/',然后把'/‘变成 ' ’用stringstream读入
2.如果规则中没有<path>,可以先判断规则和url地址的字符串数是不是相等,正常匹配,一旦不符合flag = 0,然后最坑的是再判断一下规则和url后面是不是都有'/‘或都没有,必须相同才能匹配,这个没有就60分了,实在没看出来他那里说清楚了
3如果规则中有<path>,注意path能匹配的参数是可带'/’的字符串,abcd/0123/ 和 js/jquery.js都是匹配<path>的,把规则后面所有的字符串加上就可以了,末尾应该要看他是abcd/0123/还是 js/jquery.js判断是否加'/‘,但是统统不加能过,都加了过不了;
4.不用goto语句的话写成函数也很好,
5.数据很水,没有<int> 参数为0的数据,不然我前面的代码过不了。
100分代码,很多逻辑不太顺的地方,懒得改了,
代码如下
#include <iostream>
#include <string>
#include <cstring>
#include <string.h>
#include <sstream>
#include <stdio.h>
#include <set>
#include <sstream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <queue>
#include <stack>
#include <time.h>
#include <math.h>
#include <ctype.h>
#include <list>
#include <map>
#include<cstdlib>
#include <sstream>
using namespace std;
#define ctime printf("Time used = %.2fn", (double)clock() / CLOCKS_PER_SEC);
#define fast ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define _for(i,a,b) for(int i = a;i < b;i++)
#define _rep(i,a,b) for(int i = a;i <= b;i++)
#define all(s) s.begin(), s.end()
#define local freopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#define ll long long
#define fi first
#define se second
const int INF = 1e9;
const int mod = 1000;
const int maxn = 2e4+50;
int n, m,ip[105];
vector<string> rul[105],ans[105],tmp;
string st[105],s;
int main() {
//local
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> s >> st[i];
int len = s.length();
if (s[len - 1] != '/') ip[i] = 1;
else ip[i] = 0;
for (int j = 0; j < len; j++) {
if (s[j] == '/') s[j] = ' ';
}
stringstream ss(s);
string str;
while (ss >> str) rul[i].push_back(str);
}
for (int i = 0; i < m; i++) {
cin >> s;
int len = s.length(), isp = 0;
bool ok = false;
if (s[len - 1] != '/') isp = 1;
for (int j = 0; j < len; j++) {
if (s[j] == '/') s[j] = ' ';
}
stringstream ss(s);
string str;
tmp.clear();
while (ss >> str) tmp.push_back(str);
for (int j = 0; j < n; j++) {
if (ok) break;
ans[j].clear();
int rn = rul[j].size(),flag = 1,ts = tmp.size(),k;
for (k = 0; k < rn && k < ts; k++) {
if (rul[j][k] == tmp[k]);
else if (rul[j][k] == "<int>") {
int ilen = tmp[k].length(), isnum = 1,first = 1;
string num = "";
for (int t = 0; t < ilen; t++) {
if (tmp[k][t]<'0' || tmp[k][t] > '9') {
isnum = 0;
break;
}
if (first && tmp[k][t] != '0') {
first = 0;
num += tmp[k][t];
}
else if (!first) num += tmp[k][t];
}
if (!isnum) {
flag = 0;
break;
}
else {
if (num == "") num = "0";
ans[j].push_back(num);
}
}
else if (rul[j][k] == "<str>") ans[j].push_back(tmp[k]);
else if(rul[j][k] == "<path>") {
string pat = "";
while (k < tmp.size() - 1) pat += tmp[k++] + '/';
pat += tmp[k];
ans[j].push_back(pat);
flag = 1;
goto lable;
}
else {
flag = 0;
break;
}
}
if (ts != rn || isp != ip[j]) {
flag = 0;
continue;
}
lable:;
if (flag) {
ok = true;
cout << st[j];
for (int k = 0; k < ans[j].size(); k++)
cout << " " << ans[j][k];
cout << endl;
}
}
if (!ok) cout << "404" << endl;
}
}
最后
以上就是专注野狼为你收集整理的ccf url映射的全部内容,希望文章能够帮你解决ccf url映射所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复