您的位置:首页 > 其它

CCF_201604-3_路径解析

2016-11-23 20:41 295 查看

100分版

#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;

}

我的60分

#include <bits/stdc++.h>

#include<string>

using namespace std;

int main()

{

    int n;

    string cur_category,tmp,tmp_category;

    vector<string> category;

   cin>>n;

   cin>>cur_category;

   for(int i=0;i<n;i++)

   {

       cin>>tmp;

       tmp_category=cur_category;

       while(1)

       {

            if(tmp.find("..",0)!=-1)

          {

                if(tmp_category.find_last_of('/',tmp_category.length()-1)==0)

                    tmp_category="/";

                else{tmp_category=tmp_category.substr(0,tmp_category.find_last_of('/',tmp_category.length()-1));}

                tmp=tmp_category+tmp.substr(tmp.find("..",0)+2,tmp.length()-tmp.find("..",0)-2);

          }

          else if(tmp.find('.',0)!=-1)

          {

              tmp=tmp.erase(tmp.find('.',0),2);

          }

          else if(tmp.find("//",0)!=-1)

          {

              tmp=tmp.erase(tmp.find("//",0),1);

          }

          else if(tmp[tmp.length()-1]=='/'&&tmp!="/")

            tmp=tmp.erase(tmp.length()-1,1);

          else

            break;

       }

       category.push_back(tmp);

   }

    for(int i=0;i<n;i++)

    {

        cout<<category[i]<<endl;

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ccf