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