CCF201604 3路徑解析

2021-07-16 17:50:33 字數 1698 閱讀 5364

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

輸入格式

第一行包含乙個整數 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

評測用例規模與約定

1 ≤ p ≤ 10。

檔案和目錄的名字只包含大小寫字母、數字和小數點 .、減號 - 以及下劃線 _。

不會有檔案或目錄的名字是 . 或 .. ,它們具有題目描述中給出的特殊含義。

輸入的所有路徑每個長度不超過 1000 個字元。

輸入的當前目錄保證是乙個經過正規化操作後的路徑。

對於前 30% 的測試用例,需要正規化的路徑的組成部分不包含 . 和 .. 。

對於前 60% 的測試用例,需要正規化的路徑都是絕對路徑。

字串剪下,棧操作(pop來模擬」..」上一級目錄)

#include

#include

#include

using

namespace

std;

// 分割

vector

split(string str,string ch);

// 處理

string handle(vector

v);

vector

vcurpath;

string curpath;

int main()

// 計算

vector

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

vector

split(string str,string ch)

temp=str.substr(a);

v.push_back(temp);

return v;

}string handle(vector

v)for (int i = 0; i < v.size(); ++i)

else

if (v[i]=="..")

else

}string res;

for (int i = 0; i < vtemp.size(); ++i)

// 根目錄

if(vtemp.size()==0)

return res;

}

CCF201604 3路徑解析

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

CCF 201604 3 路徑解析

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

CCF201604 3 路徑解析

首先把絕對目錄和相對目錄都轉換成絕對目錄,即加上目前的目錄 然後將中間多餘的 都根據實際情況捨去 判斷是否是根目錄,如果是根目錄,加乙個 最後注意的是有可能輸入是乙個換行符,則表示目前的目錄,所以輸入格式要注意。16 04 3.cpp 定義控制台應用程式的入口點。include stdafx.h i...