文件结构“图”

来源:互联网 发布:淘宝优惠券软件哪个好 编辑:程序博客网 时间:2024/04/28 11:55
题目:

在计算机上看到文件系统的结构通常很有用。Microsoft Windows上面的"explorer"程序就是这样的一个例子。但是在有图形界面之前,没有图形化的表示方法的,那时候最好的方式是把目录和文件的结构显示成一个"图"的样子,而且使用缩排的形式来表示目录的结构。比如:

ROOT|     dir1|     file1|     file2|     file3|     dir2|     dir3|     file1file1file2

这个图说明:ROOT目录包括三个子目录和两个文件。第一个子目录包含3个文件,第二个子目录是空的,第三个子目录包含一个文件。

输入
你的任务是写一个程序读取一些测试数据。每组测试数据表示一个计算机的文件结构。每组测试数据以'*'结尾,而所有合理的输入数据以'#'结尾。一组测试数据包括一些文件和目录的名字(虽然在输入中我们没有给出,但是我们总假设ROOT目录是最外层的目录)。在输入中,以']'表示一个目录的内容的结束。目录名字的第一个字母是'd',文件名字的第一个字母是'f'。文件名可能有扩展名也可能没有(比如fmyfile.dat和fmyfile)。文件和目录的名字中都不包括空格,长度都不超过30。一个目录下的子目录个数和文件个数之和不超过30。
输出
在显示一个目录中内容的时候,先显示其中的子目录(如果有的话),然后再显示文件(如果有的话)。文件要求按照名字的字母表的顺序显示(目录不用按照名字的字母表顺序显示,只需要按照目录出现的先后显示)。对每一组测试数据,我们要先输出"DATA SET x:",这里x是测试数据的编号(从1开始)。在两组测试数据之间要输出一个空行来隔开。

你需要注意的是,我们使用一个'|'和5个空格来表示出缩排的层次。
样例输入
file1file2dir3dir2file1file2]]file4dir1]file3*file2file1*#
样例输出
DATA SET 1:ROOT|     dir3|     |     dir2|     |     file1|     |     file2|     dir1file1file2file3file4DATA SET 2:ROOTfile1file2


i)正确解法
#include <cstring>#include <string>#include <iostream>#include <queue>using namespace std;int main(){    string inp;    int ndir = 1; //标志缩进 ,也说明了目录的级数     priority_queue <string,vector<string>, greater<string> > q[1005];    int mark = 1; //标志是否输出ROOT     int ca = 1; //标志第几次测试     while(true)    {        cin >> inp;        if(inp[0] == '#') break;        if(mark)        {            cout <<"DATA SET "<< ca << ":" <<endl;            cout << "ROOT" << endl;            mark = 0;        }        if(inp[0] == 'd') //遇见目录直接输出         {            for(int i = 0; i < ndir; i++)                cout << "|     ";            cout << inp << endl;            ndir++;        }        else if(inp[0] == 'f') //遇到文件放入队列,并排序         {            q[ndir].push(inp);        }        else if(inp[0] == ']' || inp[0] == '*')          {            while(!q[ndir].empty())            {                for(int i = 0; i < ndir - 1; i++)                    cout << "|     ";                cout << q[ndir].top() << endl;                q[ndir].pop();            }            ndir--;        }        if(inp[0] == '*')        {            mark = 1;            ndir = 1;            ca++;            cout <<endl;        }    }    return 0;}

ii)不成熟的做法(没有将文件,目录排序,而是直接输出)
#include<stdio.h>int black = 0; void show(char s[]){if(black == 0){printf("%s\n",s);return;}for(int i = 1;i <= black;i ++){if(i % 5 == 1)printf("| ");elseprintf("%c",' ');}printf("%s\n",s);}void print(char s[]){switch(s[0]){case 'f':show(s);scanf("%s",s);print(s);break;case 'd':black += 5;show(s);scanf("%s",s);print(s);break;case ']':black -= 5;scanf("%s",s);print(s);break;case '*':return;}}int main(){char s[31];int times = 1;scanf("%s",s);while(s[0] != '#'){printf("DATA SET %d:\nROOT\n",times);print(s);times ++;printf("\n");if(s[0] == '#')break;scanf("%s",s);}}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝胃浅容易吐怎么办 农村户口小孩去城里读书怎么办 小孩从城市回农村读书怎么办 天冷了怎么办教案反思 小孩上幼儿园不爱学习怎么办 曰光灯管监控要反光怎么办 立邦乳胶漆墙面脏了怎么办 橱柜门黑色边颜色花了怎么办 地板上有真实漆怎么办 吸了泡泡球的气怎么办 办公室上班坐着太累怎么办 金雀盆景生虫怎么办 租的房子墙脏怎么办 租住个厕所对着卧室怎么办 农村的房子没有房产证怎么办 墙面漆颜色深了怎么办 浴室门对卧室门怎么办 卧室40多个平方太大怎么办 卧室门洞太窄了怎么办 刷漆的墙面脏了怎么办 卧室颜色刷重了怎么办 感觉房子买小了怎么办 淋浴房一边是窗怎么办 1岁宝宝让狗咬了怎么办 2岁宝宝让狗咬了怎么办 带4个小孩只买两张儿童票怎么办 墙面补漆颜色有色差怎么办 墙壁刷的乳胶漆颜色不满意怎么办 门被水泡的鼓了怎么办 定制衣柜做大了怎么办 找平的地面高了怎么办 卫生间推拉门锁坏了怎么办 阳台推拉门框安装斜了怎么办? 电子门钥匙坏了怎么办 门的保险锁坏了怎么办 小区楼宇门坏了怎么办 门的锁坏了怎么办 汽车门把锁坏了怎么办 厨柜门上的板板掉了怎么办 衣柜门滑轮坏了怎么办 厨房推拉门推动时有声音是怎么办?