CCF 路徑解析題解

2021-10-07 14:43:44 字數 1837 閱讀 4158

有一段時間沒有寫ccf題了,今天花了一點時間自己寫了道題。花點時間來寫篇題解mark一下。

題目鏈結入下,相信能看到這個題解的人都應該很熟悉題目

這個題的題意大致如下:

給出一些表示路徑的字串,然後需要實現按一定規則將路徑正規化。

正如ccf大多數第三題的套路,按一定的規則做一些字串的處理,這題也不例外,那麼完成這個題需要注意以下幾點規則。

1.保證表達的路徑不變的情況下去掉.和…

這個實現的話,可以這麼理解,/./表示當前目錄,那麼只需要在字串裡面刪除.和/就可以。然後用string.find()找到/./的位置,然後刪除/.就能完成這一條

具體實現如下:

//去掉/./

int pos=0;

while

((pos=path.

find

("/./"))

!=-1)

2.去掉多餘的/

這個字元的話,需要去掉重複的/還需要去掉末尾的/。這一功能我在實現上有些臃腫,我的理解是從前往後逐個遍歷,遇到重複的/就刪除,遇到末尾的/也刪除,但是注意你需要排除一下特殊情況!!!就是「」這種情況!!!然後注意一下別越界就行了。具體實現如下:

for

(int i=

0;isize()

;i++

)//去掉多餘的斜槓

else

//如果沒有到結尾,那就檢查有沒有連續的/

i--;}

}}}

3.空字串表示著當前目錄,這裡有乙個很容易錯的地方!!!就是如果你是用cin讀入字串的那,cin是無法讀入空串的!!!所以需要用getline()

然後其他的問題不大。

4.關於絕對路徑還是相對路徑的問題!其實這裡大可不必去單獨處理相對路徑,雖然以上思路都是針對絕對路徑做的處理。因為,相對路徑加上當前目錄就是絕對路徑!!!所以這裡也可以統一起來.

okok!大致思路就是這樣以下上**!!!

#include

using

namespace std;

bool

is_root

(string path)

return

true;}

intmain

(void)if

(is_root

(path)

==true

)//讀的是乙個空字串或者只含有'/'則判定得到的是乙個根目錄

//判斷它是絕對路徑還是相對路徑

if(path[0]

=='/'

) path_type=1;

else

path_type=0;

if(path_type==1)

path=path;

else

path=current_path+

"/"+path;

for(

int i=

0;isize()

;i++

)//去掉多餘的斜槓

else

//如果沒有到結尾,那就檢查有沒有連續的/

i--;}

}}}//去掉/./

int pos=0;

while

((pos=path.

find

("/./"))

!=-1)

while

((pos=path.

find

("/../"))

!=-1)

} cout<}return0;

}

CCF路徑解析

問題描述 在作業系統中,資料通常以檔案的形式儲存在檔案系統中。檔案系統一般採用層次化的組織形式,由目錄 或者資料夾 和檔案構成,形成一棵樹的形狀。檔案有內容,用於儲存資料。目錄是容器,可包含檔案或其他目錄。同乙個目錄下的所有檔案和目錄的名字各不相同,不同目錄下可以有名字相同的檔案或目錄。為了指定檔案...

CCF 路徑解析

試題編號 201604 3 試題名稱 路徑解析 時間限制 1.0s 記憶體限制 256.0mb 問題描述 在作業系統中,資料通常以檔案的形式儲存在檔案系統中。檔案系統一般採用層次化的組織形式,由目錄 或者資料夾 和檔案構成,形成一棵樹的形狀。檔案有內容,用於儲存資料。目錄是容器,可包含檔案或其他目錄...

CCF 路徑解析

思路本題就是乙個簡單的字串操作的問題,具體分為以下情況 1.的形式代表的是當前目錄,所以之間刪除 即可,保留最後乙個 2.的形式代表的是上一級目錄,所以需要刪除 代表當前目錄,刪除即可回到上一級。3.連續多個 直接刪除留下乙個即可。4.最後乙個 直接刪除。本題有乙個點,就是用scanf輸入字串的話不...