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[0] != '/': print('/'+E) else: print(E)