[机房测试]文件系统

现在你要实现一个文件系统,支持以下操作
cd Directory Name
如果当前路径下有名为Directory_ Name的文件夹,则进入该文件夹所对应的路径,
否则输出“No such directory!"
ed ..
如果当前路径存在父路径,则返回父路径,
否则输出“No parent directory!"
touch File Name
如果当前目录下存在名为File_ Name的文件则输出"File already exists!"
否则创建这样一个文件。
rm File_ Name
如果当前目录下存在名为File_ Name的文件则删除它
否则输出“No such fle!"
mkdir Directory Name
如果在当前路径下存在名为Direetory_ Name 的文件夹,则输出"Directory already exists!"
否则创建这样一个文件夹(当前路径不变)
rmdir Directory_ Name
如果在当前路径下存在名为Directory_ Name的文件夹,则删除之
否则输出“No such directory!"
ls
列出当前路径下所有的文件和文件夹,每一项占一行,按创建的先后顺序给出。
采用以下形式输出
"Item_ Name”
Type为D (文件夹)或F (文件)
注意:同一路径下文件与文件夹可以同名,但同一路径下文件与文件、文件夹与文件夹不能
同名。
初始时当前路径处于根路径下,无父路径。

这道瞎搞题,前几天写动态开点写入魔了,差点写个动态开点

结果最后还是用一个普通的链表过了

真的没有任何技术含量,十分钟就打完了

代码:

//不要无脑复制粘贴,留了点坑,自己看着改 
//cd Name:进入一个文件夹
//cd ..:回到父节点  
//touch name:创建一个文件
//rm Name:删除一个文件
//mkdir Name:创建一个文件夹
//rmdir Name:删除一个文件夹 
//ls:按顺序输出其路径下的所有文件和文件夹 
#include<bits/stdc++.h>
#define check_name (a[id].name[1]==c2[1]&&a[id].name[2]==c2[2]\
&&a[id].name[3]==c2[3]&&a[id].name[4]==c2[4]&&a[id].name[5]==c2[5]\
&&a[id].name[6]==c2[6]&&a[id].name[7]==c2[7]&&a[id].name[8]==c2[8]\
&&a[id].name[9]==c2[9]&&a[id].name[10]==c2[10])

using namespace std;

int T;
char c1[20],c2[20];

struct Point
{
    int kind;//0代表删除,1代表文件夹,2代表文件
    char name[25];//名字 
    int nxt[105],sonnum;//儿子链表
    int fa;
}a[205];

int main()
{
    freopen("files.in","r",stdin);
    freopen("files.out","w",stdout);
    int now=1;
    int maxid=1;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",c1+1);
        if(c1[1]!='l') scanf("%s",c2+1);
        if(c1[1]=='c'&&c1[2]=='d'&&c2[1]!='.')//进入一个文件夹 
        {
            for(register int i=1;i<=a[now].sonnum;++i)
            {
                int id=a[now].nxt[i];
                if(check_name&&a[id].kind)
                {
                    now=id;
                    goto ed;
                }
            }
            puts("No such directory!");
            goto ed;
        }
        if(c1[1]=='c'&&c1[2]=='d'&&c2[1]=='.')//回到上一个文件夹
        {
            if(a[now].fa) {now=a[now].fa;goto ed;}
            else {puts("No parent directory!");goto ed;}
        }
        if(c1[1]=='t')//创建一个文件 
        {
            for(register int i=1;i<=a[now].sonnum;++i)
            {
                int id=a[now].nxt[i];
                if(check_name&&a[id].kind)
                {
                    if(a[id].kind==2) {puts("Directory already exists!");goto ed;}
                }
            }
            a[now].nxt[++a[now].sonnum]=++maxid;
            a[maxid].fa=now;
            strcpy(a[maxid].name+1,c2+1);
            a[maxid].kind=2;
//          puts("Crate!");
            goto ed;
        }
        if(c1[1]=='r'&&c1[2]=='m'&&c1[3]!='d')//删除一个文件
        {
            for(register int i=1;i<=a[now].sonnum;++i)
            {
                int id=a[now].nxt[i];
                if(check_name&&a[id].kind)
                {
                    a[id].kind=0;
                    goto ed;
                }
            }
            puts("No such file!");
            goto ed;
        } 
        if(c1[1]=='m')//创建一个文件夹
        {
            for(register int i=1;i<=a[now].sonnum;++i)
            {
                int id=a[now].nxt[i];
                if(check_name&&a[id].kind)
                {
                    if(a[id].kind==1) {puts("Directory already exists!");goto ed;}
                }
            }
            a[now].nxt[++a[now].sonnum]=++maxid;
            a[maxid].fa=now;
            strcpy(a[maxid].name+1,c2+1);
            a[maxid].kind=1;
//          puts("create!");
            goto ed;
        }
        if(c1[1]=='r'&&c1[2]=='m'&&c1[3]=='d')//删除一个文件夹 
        {
            for(register int i=1;i<=a[now].sonnum;++i)
            {
                int id=a[now].nxt[i];
                if(check_name&&a[id].kind)
                {
                    a[id].kind=0;
                    goto ed;
                }
            }
            puts("No such directory!");
            goto ed;
        }
        if(c1[1]=='l'&&c1[2]=='s')//输出所有文件和文件夹
        {
            for(register int i=1;i<=a[now].sonnum;++i)
            {
                int id=a[now].nxt[i];
                if(a[id].kind)
                {
                    printf("%s ",a[id].name+1);
                    printf("<%c>\n",a[id].kind==1?'D':'F');
                }
            }
            goto ed;
        }
    ed:;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/tqr06/p/11580044.html