Linux系統中,文件全路徑以”/”開頭和作為分隔符,開頭的”/”為根目錄,作為分隔符的”/”表示一層目錄。
以文件全路徑”/a/b/file.c”為例
‘a’為根目錄’/’下的子目錄
‘b’為目錄’a’下的子目錄
‘file.c’為目錄’/a/b’下的子文件
合法的全路徑包含元素
允許出現多個連續的”/”,與一個”/”等價,例如”////a”表示目錄’/a’
允許出現特殊目錄 “.” “..” 其中”.”表示當前層次,”..”表示當前層次的父目錄(根目錄的父目錄為根) 格式化的全路徑有一下要求:以’/’開頭,存在連續的’/’
不存在特殊目錄 “.” “..”默認轉化為等價目錄
不以”/”結尾(根目錄除外,根目錄的全路徑輸出為”/”)
比如合法全路徑”/a///b/c/../././”的格式化全路徑為”/a/b”
預期:輸入一個合法全路徑,轉化並打印其格式化全路徑
解題思路:
1.把..替換為*防止誤傷
2.把所有的./替換為/
3.把所有//替換為/直到字符串中沒有//
4.用/切割成list。
5.如果存在..(*)的話,且不為第二個,則刪除list里面的..和前一個索引對應的值,如果為第二個的話則刪除本身即可
6.如果list為空則輸出”/”,否則將list里面的值取出來用/拼接就是最后答案了
Python3代碼如下:
A=input()
B=A.replace('..','*')
C=B.replace('./','/')
while '//' in C:
C=C.replace('//','/')
D=C.split('/')
while '*' in D:
index1=D.index('*')
if index1 != 0:
D.remove(D[index1])
D.remove(D[index1-1])
else:
D.remove(D[index1])
E='/'.join(D)
if len(E) == 0 :
print('/')
else:
if E[-1] == '/':
E=E[0:-1]
if E[0] != '/':
E='/'+ E
print(E)