zoukankan      html  css  js  c++  java
  • [20190924机房测试] 文件系统

    现在你要实现一个文件系统,支持以下操作
    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>
    
    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];
    
    bool check_name(int x)
    {
    	int len=strlen(c2+1);
    	for(register int i=1;i<=len;++i)
    		if(a[x].name[i]!=c2[i]) return 0;
    	return 1;
    }
    
    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(id)&&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(id)&&a[id].kind)
    				{
    					if(a[id].kind==2) {puts("File 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(id)&&a[id].kind==2)
    				{
    					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(id)&&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(id)&&a[id].kind==1)
    				{
    					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>
    ",a[id].kind==1?'D':'F');
    				}
    			}
    			goto ed;
    		}
    	ed:;
    	}
    	return 0;
    }
    
  • 相关阅读:
    特征的处理
    Pandas读取文件
    标准化数据-StandardScaler
    hibernate 继承映射
    hibernate 多对多关联映射
    hibernate 一对一关联映射
    hibernate 一对多 单双向关联
    hibernate配置文件
    spring整合struts2
    AWS云教育账号创建以及搭建数据库
  • 原文地址:https://www.cnblogs.com/tqr06/p/11580044.html
Copyright © 2011-2022 走看看