#P12014. 目录结构图[升级]2

目录结构图[升级]2

题目背景

在计算机上查看文件系统的结构通常很有用,Microsoft Windows 的资源管理器就是一个典型的例子。在图形化操作系统出现之前,没有图形化的表示方法,一种较好的处理方法是把目录(也就是文件夹)和文件的结构显示成一个“图”的形式,并使用缩排来表示目录的结构。例如:

ROOT
|  ROOT/dir1
|  |  ROOT/dir1/file1.in
|  |  ROOT/dir1/file2.in
|  |  ROOT/dir1/file3.in
|  ROOT/dir2
|  ROOT/dir3
|  |  ROOT/dir3/file1.txt
|  ROOT/file1.jpg
|  ROOT/file2.mp4

这个“图”表示的结构如下:ROOT 目录(也就是根目录)包括 33 个子目录(dir1dir2dir3)和 22 个文件(file1.jpgfile2.mp4)。第一个子目录 dir1 包含 33 个文件(file1.infile2.infile3.in),第二个子目录 dir2 是空的,第三个子目录 dir3 包含 11 个文件(file1.txt)。图中显示的是目录和文件的 完整路径

题目描述

你的任务是写一个程序读取一些测试数据,每组测试数据表示一个目录结构,输出使用缩排的形式来表示目录结构的“图”。“图”中用 完整路径 显示的目录和文件。

输入格式

每组测试数据以一行特殊的 * 结尾,最后一组测试数据输入完毕后,会有一行 # 表示输入结束。

一组测试数据包括一些文件和目录的名称(虽然在输入中没有给出,但是总假设 ROOT 目录是最外层的目录,也就是根目录)。

在输入中,以 ] 表示一个目录的内容结束(空目录亦如此)。目录名称不包含 .,文件名称包含 .

需要特别注意的是,每个文件名独占一行、每个目录名独占一行、特殊的符号 *#] 也独占一行。

输出格式

在显示一个目录中内容的时候,先显示其中的子目录(如果有子目录的话),然后再显示目录下的文件(如果有文件的话)。

同一个目录下的文件要求按照文件名称升序排序结果依次显示,同一个目录下的子目录也要求按照子目录名称升序排序结果依次显示

对每一组测试数据,需要要先输出 DATA SET x:,这里 x\verb|x| 是测试数据组的编号(从 11 开始)。在两组测试数据之间要输出一个空行来隔开。

需要注意的是,使用一个 |22 个空格来表示缩排的层次。

输入输出样例

file2.in
file1.in
dir4
z
]
y
]
x
]
]
dir3
file2.xls
dir2
file2.png
file1.jpg
]
file1.docx
]
dir2
kk.ppt
]
file4.txt
dir1
]
file3.mp4
*
file2.svg
file1.out
*
#
DATA SET 1:
ROOT
|  ROOT/dir1
|  ROOT/dir2
|  |  ROOT/dir2/kk.ppt
|  ROOT/dir3
|  |  ROOT/dir3/dir2
|  |  |  ROOT/dir3/dir2/file1.jpg
|  |  |  ROOT/dir3/dir2/file2.png
|  |  ROOT/dir3/file1.docx
|  |  ROOT/dir3/file2.xls
|  ROOT/dir4
|  |  ROOT/dir4/x
|  |  ROOT/dir4/y
|  |  ROOT/dir4/z
|  ROOT/file1.in
|  ROOT/file2.in
|  ROOT/file3.mp4
|  ROOT/file4.txt

DATA SET 2:
ROOT
|  ROOT/file1.out
|  ROOT/file2.svg

说明/提示

👀️ 对于100%100\% 的数据,文件和目录的名称中仅包含英文字符不包括空格和 /,长度都不超过 3030。一个目录下的子目录个数和文件个数之和不超过 3030。保证同一目录下没有同名的子目录和同名的文件。