ccf 路径解析 java_ccf之路徑解析java版

import java.util.Scanner;

import java.util.Stack;

public class Main {

public static void main(String[] args)

{

new Main().run();

}

public void run ()

{

Scanner z=new Scanner(System.in);

int num=z.nextInt();

Stack stack1=new Stack();

Stack stack2=new Stack();

String cur=z.next();

String[] str=new String[num];

for (int i = 0; i < num; i++) {

str[i]=z.next();

if(str[i]=="")

str[i]=cur;

else

{

str[i]=str[i].trim();

str[i]=toAbs(str[i],cur);

str[i]=tocorrect(str[i]);

str[i]=cleantail(str[i]);

}

}

for (int i = 0; i < str.length; i++) {

System.out.println(str[i]);

}

}

public String tocorrect(String s) {

String ss="";

Stack stack=new Stack();

Stack stack1=new Stack();

for(int i=0;i

{

if(!stack.isEmpty())

{

if(s.charAt(i)=='/'&&stack.peek()=='/')

{

continue;

}

else if(s.charAt(i)=='/'&&stack.peek()=='.')

{

stack.pop();

continue;

}

else if(s.charAt(i)=='.'&&stack.peek()=='.')

{

stack.pop();

stack.pop();

String res="";

while(!stack.isEmpty())

{

res+=stack.pop();

}

int index=res.indexOf('/');

String res1="";

if(index==-1)

res1=res;

else

res1=res.substring(index);

for (int j = res1.length()-1; j >=0; j--) {

stack.push(res1.charAt(j));

}

continue;

}

else

{stack.push(s.charAt(i));}

}

else

{stack.push(s.charAt(i));}

}

while(!stack.isEmpty())

{

stack1.push(stack.pop());

}

while(!stack1.isEmpty())

{

ss+=stack1.pop();

}

return ss;

}

public String toAbs(String s,String cur)

{

String ss="";

if(s.charAt(0)!='/')

{

if(s.charAt(0)=='.' )

{

if(s.charAt(1)=='.')

{

int index=cur.lastIndexOf('/');

ss+=cur.substring(0, index);

ss+=s.substring(2);

}

else

{

ss+=cur;

ss+=s.substring(1);

}

}

else

{

ss+=cur;

ss+="/";

ss+=s;

}

}

else ss=s;

return ss;

}

public String cleantail(String s)

{

if(s.length()==1)

return s;

else{

if(s.charAt(s.length()-1)=='/')

{

s=s.substring(0,s.length()-1);

return s;

}

else

return s;

}

}

}

在操作系統中,數據通常以文件的形式存儲在文件系統中。文件系統一般采用層次化的組織形式,由目錄(或者文件夾)和文件構成,形成一棵樹的形狀。文件有內容,用於存儲數據。目錄是容器,可包含文件或其他目錄。同一個目錄下的所有文件和目錄的名字各不相同,不同目錄下可以有名字相同的文件或目錄。  為了指定文件系統中的某個文件,需要用路徑來定位。在類 Unix 系統(Linux、Max OS X、FreeBSD等)中,路徑由若干部分構成,每個部分是一個目錄或者文件的名字,相鄰兩個部分之間用 / 符號分隔。  有一個特殊的目錄被稱為根目錄,是整個文件系統形成的這棵樹的根節點,用一個單獨的 / 符號表示。在操作系統中,有當前目錄的概念,表示用戶目前正在工作的目錄。根據出發點可以把路徑分為兩類:   絕對路徑:以 / 符號開頭,表示從根目錄開始構建的路徑。   相對路徑:不以 / 符號開頭,表示從當前目錄開始構建的路徑。  例如,有一個文件系統的結構如下圖所示。在這個文件系統中,有根目錄 / 和其他普通目錄 d1、d2、d3、d4,以及文件 f1、f2、f3、f1、f4。其中,兩個 f1 是同名文件,但在不同的目錄下。

aHR0cDovLzExNS4yOC4xMzguMjIzL1JlcXVpcmVGaWxlLmRvP2ZpZD1hTUxOYWZScQ==  對於 d4 目錄下的 f1 文件,可以用絕對路徑 /d2/d4/f1 來指定。如果當前目錄是 /d2/d3,這個文件也可以用相對路徑 ../d4/f1 來指定,這里 .. 表示上一級目錄(注意,根目錄的上一級目錄是它本身)。還有 . 表示本目錄,例如 /d1/./f1 指定的就是 /d1/f1。注意,如果有多個連續的 / 出現,其效果等同於一個 /,例如 /d1///f1 指定的也是 /d1/f1。  本題會給出一些路徑,要求對於每個路徑,給出正規化以后的形式。一個路徑經過正規化操作后,其指定的文件不變,但是會變成一個不包含 . 和 .. 的絕對路徑,且不包含連續多個 / 符號。如果一個路徑以 / 結尾,那么它代表的一定是一個目錄,正規化操作要去掉結尾的 /。若這個路徑代表根目錄,則正規化操作的結果是 /。若路徑為空字符串,則正規化操作的結果是當前目錄。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值