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;
    }
    
  • 相关阅读:
    ACM的算法分类 2015-04-16 14:25 22人阅读 评论(0) 收藏
    初学Larevel 2014-08-21 11:24 90人阅读 评论(0) 收藏
    初学PHP&MySQL 2014-05-31 12:40 92人阅读 评论(0) 收藏
    codeforces 570 E. Pig and Palindromes (dp)
    codeforces 570 D. Tree Requests (dfs序)
    poj 2157 Maze (bfs)
    cf 570 C. Replacement (暴力)
    cf 570B B. Simple Game(构造)
    cf 570 A. Elections
    hdu 1429胜利大逃亡(续) (bfs+状态压缩)
  • 原文地址:https://www.cnblogs.com/tqr06/p/11580044.html
Copyright © 2011-2022 走看看