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)