路径解析
题目描述:
解题思路:
用到了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;
}