• CCF_201604-3_路径解析


      没有用stack来写,直接用了字符串和指针,过程有点复杂的。首先对读入的每一个路径,判断它是绝对路径或者相对路径,然后确定起始的路径,然后继续一位位的判断,"//","/../","/./"等多种情况,还需要考虑末尾有无"/"和是否为空行等等。

      当我把一切都写好了的时候,提交之后发现只有90分,苦思无果,然后仔细阅读来一下题目,发现题目没有排除文件名字为"..***"和".***"的情况,做了相应修改后再次提交终于满分了!泪牛满面~~

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    
    int main()
    {
        char root[1005],each[2005];
        int n;
        scanf("%d",&n);
        getchar();
        gets(root);
        while(n--)
        {
            char ans[2005] = {0};
            gets(each);
            char *p1,*p2;
            if(each[0] != '/')
            {
                strcpy(ans,root);
                p1 = ans;
                while(*p1 != 0)     p1++;
                *p1 = '/';
                p2 = each;
            }
            else
            {
                p1 = ans;
                *p1 = '/';
                p2 = each;
            }
            while(*p2 != 0)
            {
    
                if(*p1 == '/' && *p2 == '.' && *(p2+1) =='.' && (*(p2+2) == '/' || *(p2+2) == 0))
                {
                    if(p1 == ans)    {}
                    else    while(*--p1 != '/');
                    p2 += 2;
                }
                else if(*p1 == '/' && *p2 == '/')    p2++;
                else if(*p1 == '/' && *p2 == '.'  && (*(p2+1) == '/' || *(p2+1) == 0))    p2++;
                else    *++p1 = *p2++;
            }
            if(*p1 == '/' && p1 != ans)  *p1 = 0;
            else *(p1+1) = 0;
            puts(ans);
        }
        return 0;
    }
  • 相关阅读:
    常见常用的CSS
    Js删除数组函数
    使用CSS让多出来的字变为省略号
    CSS缩写的样式
    mac下安装nginx
    ubuntu下程序员常用命令大全
    vue.js实现瀑布流之vue-waterfall-easy
    vue.js常见的报错信息及其解决方法的记录
    laravel5.4生成验证码
    java算法之超级丑数
  • 原文地址:https://www.cnblogs.com/zhurb/p/5842267.html
Copyright © 2020-2023  润新知