9.12更新,其实把当前路径标准化一下,就可以通过全部测试了,如果大家有需要100分的代码,留言,我再贴。
---------------------------------------------------分割线---------------------------------------------------------------------
参考了网上的一篇文章写了这个代码,但是实际上只能得70分,不知道那30的分的情况是什么样的,实在想不到,所以在这里贴出来,希望哪位朋友可以指导一下,谢谢!
题目链接:http://115.28.138.223/view.page?gpid=T40
#include <iostream>
#include <string>
#include <vector>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stack>
#define N 2005
using namespace std;
int n;
char cur[N];
char buf[N];
string curdir;
string line;
int main()
{
scanf("%d",&n);
getchar();
gets(cur);
curdir=cur;
//puts(curdir.c_str());
for(int i=0;i<n;i++)
{
gets(buf);
line.clear();
line=buf;
if(line=="")
puts(cur);
else
{
int pos;
int m=0;
while((pos=line.find("//",m))!=string::npos)
{
int count=2;
while(line[pos+count]=='/')
count++;
line.erase(pos,count-1);
m=pos+1;
}
if((pos=line.find("./",0))!=-1 && pos==0)
{
if(curdir.size()==1)
line=curdir+line;
else
line=curdir+"/"+line;
}
m=0;
while((pos=line.find("/./",m))!=-1)
{
line.erase(pos,2);
m=pos;
}
if((pos=line.find("../",0))!=-1 && pos==0)
{
if(curdir.size()==1)
line=curdir+line;
else
line=curdir+"/"+line;
}
m=0;
while((pos=line.find("/../",m))!=-1)
{
if(pos==0)
{//根目录的上一级是本身
line.erase(pos,3);
}
else
{//如:/d3/d1/../d2/f1
int spos=line.rfind("/",pos-1);//spos=3,pos=6
line.erase(spos,pos+3-spos);
m=spos;
}
}
if(line.size()>1&&line[line.size()-1]=='/')
line.erase(line.size()-1);//删除掉末尾的/
puts(line.c_str());
}
}
return 0;
}