20104-3 路径解析

路径解析

题目描述:在这里插入图片描述
在这里插入图片描述
解题思路:
用到了string的find、earse、和rfind(反向查找)。
是按照4种不一样的情况,分别是
①:多余的/
当有多余的/时就可以删去
②删除/./的情况
③删除/…/
这个地方涉及到,如果/…/不是在一开始就出现的话,就要反向找到第一个/,再确定删除的位置
④删除末尾的/

解决代码如下:

#include <iostream>
#include <string>
using namespace std;
int main() {
    int P;
    string cur,str;//cur保存当前目录,s保存之后每个需要正规化的路径
    cin>>P>>cur;
    getchar();//防止读入换行符
    while(P--) 
 {
        getline(cin, str);
        int i;
        if (str[0]!='/') //相对路径
  {
            str=cur+"/"+str;
        }
        if(str.size()==0) //注意考虑输入为空的情况
  {
            str = cur;
        }
        //删除多余的"/"
        while ((i=str.find("//"))!=-1)
  {
            int count = 2;
            while (str[i+count]=='/') 
   {
                count++;
            }
            str.erase(i,count-1);
        }
        //删除"/*/"
        while ((i=str.find("/./"))!=-1)
  {
            str.erase(i+1,2);
        }
        //处理"/**/"
        while ((i=str.find("/../"))!=-1) 
  {
            if(i==0) str.erase(i+1,3);
            else
   {
                //使用rfind向前查找
                int j=str.rfind("/",i-1);
                str.erase(j,i-j+ 3);
            }
        }
        //删除末尾的"/"
        if(str.size()>1&& str[str.size()-1]== '/') str.erase(str.size()-1);
        cout<<str<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值