= =简直… 上来一发80分,然后一直想哪里错了,然后发现是考虑了名字中带.的路径,没考虑路径为..xxxx的情况…补上之后90分……= =!!然后想可能是之前用string,不支持空行的缘故,所以又改成了char,然后就可以了
注意当前路径也有可能是需要解析的,两端代码几乎一样……迷之微笑,不想优化
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define maxn 1010
string que[maxn],tmp[maxn];
char s[maxn];
int main()
{
int n;
cin>>n;
getchar();
gets(s);
int pre=0;
int top=0;
for(int i=0;s[i]!='\0';i++)
{
if(s[i]=='/'||s[i]==' ') continue;
if(s[i]=='.')
{
if(s[i+1]=='.' && s[i+2]=='/')
{
top--,i++;
if(top<0) top=0;
continue;
}
else if(s[i+1]=='/') continue;
}
string tt ="";
int j;
for(j=i;s[j]&&s[j]!='/';j++)
tt+=s[j];
que[top++]=tt;
i=j;
}
while(n--)
{
gets(s);
int p;
for(int i=0;i<maxn;i++) tmp[i]="";
if(s[0]=='/') p=0;
else
{
for(int i=0;i<top;i++) tmp[i]=que[i];
p=top;
}
if(strlen(s))
{
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='/'||s[i]==' ') continue;
if(s[i]=='.')
{
if(s[i+1]=='.' && s[i+2]=='/')
{
p--,i++;
if(p<0) p=0;
continue;
}
else if(s[i+1]=='/') continue;
}
string tt ="";
int j;
for(j=i;s[j]&&s[j]!='/';j++)
tt+=s[j];
tmp[p++]=tt;
i=j;
}
if(p)
for(int i=0;i<p;i++) cout<<"/"<<tmp[i];
else
cout<<"/";
}
else
{
for(int i=0;i<top;i++)cout<<"/"<<que[i];
}
cout<<endl;
}
return 0;
}