Week7 csp201604 3路徑解析

2021-10-23 02:30:49 字數 1548 閱讀 3458

問題描述:

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

為了指定檔案系統中的某個檔案,需要用路徑來定位。路徑由若干部分構成,每個部分是乙個目錄或者檔案的名字,相鄰兩個部分之間用 / 符號分隔。

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

絕對路徑:以 / 符號開頭,表示從根目錄開始構建的路徑。

相對路徑:不以 / 符號開頭,表示從當前目錄開始構建的路徑。

本題會給出一些路徑,要求對於每個路徑,給出正規化以後的形式。乙個路徑經過正規化操作後,其指定的檔案不變,但是會變成乙個不包含 . 和 … 的絕對路徑,且不包含連續多個 / 符號。如果乙個路徑以 / 結尾,那麼它代表的一定是乙個目錄,正規化操作要去掉結尾的 /。若這個路徑代表根目錄,則正規化操作的結果是 /。若路徑為空字串,則正規化操作的結果是當前目錄。

輸入格式

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

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

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

輸出格式

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

思路解析:

1.模擬棧操作,為方便輸出,使用vector。

2.getline函式切分字串。看這裡

3.通過切分,提取/之間的字串,根據字串內容進行入棧出棧操作:為「…」且棧不空,出棧元素(返回上級目錄);否則,字串不為空串(多個///情況),不為「.」(表示當前目錄),入棧。

4.待切分字串的初始化:如果初始為空,直接切分start(第一行當前目錄);如果第乙個字元為/(絕對路徑),直接切分;如果初始為"…"(相對路徑),連同start切分。

5.對切分後棧情況判斷:為空,表示只有/根目錄,否則按序輸出,頭和中間加/。

**實現:

#include

#include

#include

#include

#include

#include

using

namespace std;

vector v;

string start;

void

cut(string str)

}int

main()

else

if(s[0]

=='/'

)else

if(v.

size()

==0)else

v.clear()

;}}

總結:完成乙個路徑處理後,不要忘記清空棧,否則後面的路徑越來越長,結果錯誤。

week7 CSP201604 3 路徑解析

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

csp 201604 3 題目總結回顧

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

CSP 201604 3 路徑解析

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