点击前往试题目录:https://blog.csdn.net/best335/article/details/99550556
题目中说的很明白:一个路径经过正规化操作后,其指定的文件不变,但是会变成一个不包含 . 和 … 的绝对路径,且不包含连续多个 / 符号。
当我把目录名中的‘.’去掉之后居然得80分,而保留目录中的‘.’才得满分。
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n;
string P,s,LP;
cin>>n,cin.get(),getline(cin,P);
if(P.size()>0&&P[P.size()-1]=='/') P=P.substr(0,P.size()-1);
for(int i=0;i<n;++i){
getline(cin,s);
int j=0,nj=s.size(),l=0;
if(nj>0&&s[0]!='/')s="./"+s,nj+=2;
string ans=nj==0||s[0]=='.'&&(nj==1||nj>1&&s[1]=='/')||nj>1&&s.substr(0,2)==".."&&(nj==2||nj>2&&s[2]=='/')?P:"";
while(j<nj){
while(j<nj&&s[j]=='/')++j;
if(j==nj) break;
ans+="/",l=j;
while(j<nj&&s[j]!='/')++j;
string s1=s.substr(l,j-l);
if(s1==".") ans=ans.substr(0,ans.size()-1);
else if(s1=="..") ans=ans.substr(0,ans.find_last_of('/',max(0,int(ans.size()-2))));
else{
//for(int k=s1.size();k>-1;--k) if(s1[k]=='.') s1.erase(s1.begin()+k);这一句加注释才能得满分 我笑了
ans+=s1;
}
}
cout<<(ans.size()<2?"/":ans)<<endl;
}
return 0;
}