栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CSP CCF: 201803-3 URL映射 (C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CSP CCF: 201803-3 URL映射 (C++)

目录
  • 参考文章
  • 题目来源
  • 数据说明
  • 注意事项
  • 思路
  • 代码

参考文章

【CCF-CSP】URL映射

题目来源

URL映射

数据说明

注意事项
  1. 对于整数参数, 不要用 int之类的整数数据类型去存储。 直接跳过开头的 0 输出就行
  2. 因为规则和待处理的URL地址都不一定是以 '/'结尾的, 所以在将规则和待处理的URL进行比较时,特别需要注意不要吵除下标了。
思路

思路想得简洁一些, 多多注意细节(比如上边的两点,是我忽略的细节(最初只拿了60分))。

  1. 先将规则和对应的名称进行存储。 数据的存储方式简单些,就拿数组就行,不需要再去构结构体啦。
  2. 对于每个待处理的URL都需要遍历一遍规则进行比较, 如果该规则能够匹配得上,再将该规则和待处理的URL比较一次并输出相关的数据。如果匹配不上,就直接输出404。
  3. 比较函数思路其实不难,看代码能看懂哈。但我自己写的时候就是没转过弯,绕来绕去的,把自己都绕晕了。
代码
#include 
#include 

using namespace std;

const int MAXN = 1e5;
string p[MAXN], r[MAXN], q;

bool match(string q, string p, bool ifcout) {
    int qlen = q.size(), plen = p.size();
    int qindex = 0, pindex = 0;

    while (qindex < qlen && pindex < plen) {
        if (q[qindex] == p[pindex]) {  // 相同
            ++qindex;
            ++pindex;
        }
        else {  // 不同
            if (p[pindex] != '<') {  // 不能进行匹配
                return false;
            }
            ++pindex;  // +1~

            // pindex < plen
            if (pindex < plen && p[pindex] == 'i') { //  int
                // int attr = 0;  // 不能 int 呀
                string attr;

                bool flag = true;
                while (isdigit(q[qindex])) {
                    if ((flag == false && q[qindex] == '0') || q[qindex] != '0') {  // flag == false && q[qindex] == '0'
                        flag = false;
                        attr += q[qindex];
                    }
                    ++qindex;
                }

                if (ifcout) {
                    cout<<" "<
                string attr;

                while (qindex < qlen && q[qindex] != '/') {  // !!!!!!! qindex < qlen !!!!!!!!!
                    attr += q[qindex];
                    ++qindex;
                }

                if (ifcout) {
                    cout<<" "<
                if (ifcout) {
                    cout<<" "<
    ifstream cin("in.txt");

    int n, m;
    cin>>n>>m;

    for (int i = 0; i 
        cin>>p[i]>>r[i];
    }

    for (int i = 0; i < m; ++i) {
        cin>>q;

        bool flag = false;
        for (int j = 0; j < n; ++j) {
            if (match(q, p[j], false)) {
                flag = true;
                cout<
            cout<<"404";
        }

        cout<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948424.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号