您的位置:首页 > 其它

CCF认证 2016-04 路径解析

2018-02-20 09:37 253 查看
可以用string数组来保存各级目录名,开一个保存当前路径,另一个用来保存输出具体看代码和注释
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1000+10;
string s
,c
;
int s0,c0;
int main()
{
string a,b;
int p;
cin>>p;
s0=c0=0;
b="";
cin>>a;
int len=a.length();
for(int i=1;i<len;i++) //处理当前目录,保存在s中
{
if(a[i]=='/')
{
s[s0++]=b;
b="";
}
else b+=a[i];
}
if(b.length()!=0) s[s0++]=b;  //末尾要像读到'/'一样处理
getchar(); //读入换行符
while(p--)
{
getline(cin,a); //可能出现空串,所以要按行读取
b="";
int len=a.length(); //如果a是空串,算作当前路径
if(a[0]!='/'||a.length()==0) //如果是相对路径,把当前路径复制到c中
{
for(int i=0;i<s0;i++) c[i]=s[i];
c0=s0;
}
else c0=0; //否则从根目录开始
for(int i=0;i<len;i++) //处理路径
{
if(a[i]=='/') //读到'/'才分情况处理
{
if(b.length()==0) continue;
if(b==".");
else if(b=="..") c0==0?:c0--;
else c[c0++]=b;
b="";
}
else b+=a[i];
}
if(b.length()!=0) //末尾要像读到'/'一样处理
{
if(b==".");
else if(b=="..") c0==0?:c0--;
else c[c0++]=b;
b="";
}
for(int i=0;i<c0;i++)
cout<<'/'<<c[i];
if(c0==0) cout<<'/'; //根目录
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: