201604 3 ccf csp 路徑解析

2021-10-23 02:32:54 字數 2222 閱讀 3706

題目描述

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

為了指定檔案系統中的某個檔案,需要用路徑來定位。在類 unix 系統(linux、max os x、freebsd等)中,路徑由若干部分構成,每個部分是乙個目錄或者檔案的名字,相鄰兩個部分之間用 / 符號分隔。

有乙個特殊的目錄被稱為根目錄,是整個檔案系統形成的這棵樹的根節點,用乙個單獨的 / 符號表示。在作業系統中,有當前目錄的概念,表示使用者目前正在工作的目錄。根據出發點可以把路徑分為兩類:

例如,有乙個檔案系統的結構如下圖所示。在這個檔案系統中,有根目錄 / 和其他普通目錄 d1、d2、d3、d4,以及檔案 f1、f2、f3、f1、f4。其中,兩個 f1 是同名檔案,但在不同的目錄下。

對於 d4 目錄下的 f1 檔案,可以用絕對路徑 /d2/d4/f1 來指定。如果當前目錄是 /d2/d3,這個檔案也可以用相對路徑 …/d4/f1 來指定,這裡 … 表示上一級目錄(注意,根目錄的上一級目錄是它本身)。還有 . 表示本目錄,例如 /d1/./f1 指定的就是 /d1/f1。注意,如果有多個連續的 / 出現,其效果等同於乙個 /,例如 /d1///f1 指定的也是 /d1/f1。

本題會給出一些路徑,要求對於每個路徑,給出正規化以後的形式。乙個路徑經過正規化操作後,其指定的檔案不變,但是會變成乙個不包含 . 和 … 的絕對路徑,且不包含連續多個 / 符號。

如果乙個路徑以 / 結尾,那麼它代表的一定是乙個目錄,正規化操作要去掉結尾的 /。

若這個路徑代表根目錄,則正規化操作的結果是 /。

若路徑為空字串,則正規化操作的結果是當前目錄。

輸入格式

第一行包含乙個整數 p,表示需要進行正規化操作的路徑個數。

第二行包含乙個字串,表示當前目錄。

以下 p 行,每行包含乙個字串,表示需要進行正規化操作的路徑。

輸出格式

共 p 行,每行乙個字串,表示經過正規化操作後的路徑,順序與輸入對應。

輸入樣例

7

/d2/d3

/d2/d4/f1

../d4/f1

/d1/./f1

/d1///f1

/d1/

////d1/../../d2

輸出樣例

/d2/d4/f1

/d2/d4/f1

/d1/f1

/d1/f1

/d1/

/d2

解題思路思路很簡單,對每個輸入的路徑進行處理,然後把每個處理完的部分丟進乙個string陣列裡,最後依次輸出這個陣列的內容即可。

如果是空字串,注意要輸出乙個『/』

對於兩個點,只需要把陣列裡的最後乙個部分彈出即可,因為是返回上一級。

對於乙個點,啥也不處理。

具體看**:

#include

#include

#include

using

namespace std;

vectorcurpath;

//當前正在處理的路徑

void

normalize

(string path)

else

if(temp !=

".")

i = gang;}}

void

print()

else

} cout << endl;

}int

main()

temp +

='/'

;//末尾加個槓用來判斷找到了結尾

CCFCSP 201604 3 路徑解析

試題編號 201604 3 試題名稱 路徑解析 時間限制 1.0s 記憶體限制 256.0mb 參考了別人的部落格 本題主要考察對字串的修改操作。可以用string儲存路徑資訊,再使用string的類函式進行操作。首先讀入當前目錄,要注意在之後的p行路徑中的相對路徑表示的是相對初始當前目錄的路徑,而...

CCF CSP 201604 3 路徑解析

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

201604 3 路徑解析

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