文件系统 HDU - 1413
来源:互联网 发布:ubuntu 图形界面 编辑:程序博客网 时间:2024/05/29 11:55
Ignatius做了一个文件系统,为了测试他的文件系统是否能正常工作,他打算对他的文件系统做一些测试.
刚开始的时候文件系统里只有一个根目录.Ignatius将输入一系列合法的文件操作命令,请你给出文件系统应该给出的相应提示信息.
Ignatius的文件系统的文件操作命令包括:
1. CDdirectoryname directoryname : 进入当前目录下名为directoryname directoryname的子目录,如果成功,系统应提示"success",否则提示"no such directory".
2. MDdirectoryname directoryname : 在当前目录下建立名为directoryname directoryname的子目录,如果当前目录下已经存在名为directoryname directoryname的子目录,则提示"directory already exist",否则提示"success".
3. RDdirectoryname directoryname : 删除当前目录下名为directoryname directoryname的子目录,如果当前目录下不存在名为directoryname directoryname的子目录,或者名为directoryname directoryname的子目录下还有文件或子目录,则提示"can not delete the directory",否则提示"success".
4. CREATEfilename filename : 在当前目录下创建名为filename filename的文件,如果当前目录下已经存在名为filename filename的文件,则提示"file already exist",否则提示"success".
5. DELETEfilename filename : 删除当前目录下名为filename filename的文件,如果当前目录下不存在名为filename filename的文件,则提示"no such file",否则提示"success".
以下是几个特殊说明:
1. 要从当前目录退回到上一级目录可以使用"CD .."命令来实现,我们约定根目录的上一级目录是其本身,任何一个目录下都不允许创建名为".."的子目录,如果有命令试图创建名为".."的子目录,则系统应反馈"directory already exist".
2. 要从当前目录直接退回到根目录可以使用"CD \"命令来实现,任何一个目录下都不允许创建名为"\"的子目录.
3. 为了方便编程,给出的任意一个directoryname directoryname和filename filename都只包括大写字母(A-Z),并且长度都小于20.
4. 在同一个目录下允许存在同名的file和directory,但不允许出现同名的file或directory,在不同目录下则无此限制.
5. 刚开始的时候根目录下没有文件和子目录,当前目录就是根目录本身.
6. 如果一个操作是成功的,则应在当前文件系统的基础上执行相应的操作,以改变文件系统的状态.
Input 输入数据只有一组,该组测试数据包含若干行,每行代表一条文件操作命令,我保证每一条命令都是符合命令格式的.
处理到文件结束. Output 对于每一条命令,请你给出系统的反馈信息,每个反馈信息占一行.
Sample Input Sample Output
刚开始的时候文件系统里只有一个根目录.Ignatius将输入一系列合法的文件操作命令,请你给出文件系统应该给出的相应提示信息.
Ignatius的文件系统的文件操作命令包括:
1. CD
2. MD
3. RD
4. CREATE
5. DELETE
以下是几个特殊说明:
1. 要从当前目录退回到上一级目录可以使用"CD .."命令来实现,我们约定根目录的上一级目录是其本身,任何一个目录下都不允许创建名为".."的子目录,如果有命令试图创建名为".."的子目录,则系统应反馈"directory already exist".
2. 要从当前目录直接退回到根目录可以使用"CD \"命令来实现,任何一个目录下都不允许创建名为"\"的子目录.
3. 为了方便编程,给出的任意一个
4. 在同一个目录下允许存在同名的file和directory,但不允许出现同名的file或directory,在不同目录下则无此限制.
5. 刚开始的时候根目录下没有文件和子目录,当前目录就是根目录本身.
6. 如果一个操作是成功的,则应在当前文件系统的基础上执行相应的操作,以改变文件系统的状态.
处理到文件结束.
CD ACMMD ACMCD ACMCREATE ACMMD ACMCD ACMCD \RD ACMCD ACMRD ACMDELETE ACMCD ..RD ACM
no such directorysuccesssuccesssuccesssuccesssuccesssuccesscan not delete the directorysuccesssuccesssuccesssuccesssuccess
#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct fil { char name[100]; fil *next;};struct dir { char name[100]; dir *next; //同级文件夹 dir *dirhead; //子文件夹 dir *up; //上级目录 fil *filhead; //文件夹下文件};dir *Head,*NowHead;dir *searchdir(char *s) { dir *p=NowHead->dirhead->next; while(p) { if(!strcmp(p->name,s)) return p; p=p->next; } return NULL;}fil *searchfil(char *s) { fil *p=NowHead->filhead->next; while(p) { if(!strcmp(p->name,s)) return p; p=p->next; } return NULL;}void doCD() { //进入文件夹 char s[100]; scanf("%s",s); if(!strcmp(s,"\\")) { NowHead=Head; printf("success\n"); return ; } if(!strcmp(s,"..")){ NowHead=NowHead->up; printf("success\n"); return ; } dir *p=searchdir(s); if(!p) { printf("no such directory\n"); return ; } NowHead = p; printf("success\n"); return ;}void doMD() { //建立文件夹 dir *p,*q; char s[100]; scanf("%s",s); if(!strcmp(s,"..")||!strcmp(s,"\\")) { printf("directory already exist\n"); return ; } q=searchdir(s); if(q) { printf("directory already exist\n"); return ; } p = new dir; strcpy(p->name,s); p->filhead=new fil; p->filhead->next=NULL; p->dirhead=new dir; p->dirhead->next=NULL; p->up=NowHead; p->next=NowHead->dirhead->next; NowHead->dirhead->next=p; printf("success\n");}void doRD() { //删除文件夹 char s[100]; scanf("%s",s); dir *p,*q; p=searchdir(s); if(!p||p->dirhead->next) { printf("can not delete the directory\n"); return ; } q=NowHead->dirhead; while(q) { if(q->next==p) { q->next=p->next; delete p; printf("success\n"); return ; } q=q->next; }}void doCREATE() { //建立文件 char s[100]; scanf("%s",s); fil *p=searchfil(s); if(p) { printf("file already exist\n"); return ; } p = new fil; strcpy(p->name,s); p->next=NowHead->filhead->next; NowHead->filhead->next=p; printf("success\n"); return ;}void doDELETE() { //删除文件 char s[100]; scanf("%s",s); fil *p=searchfil(s),*q; if(!p) { printf("no such file\n"); return ; } q= NowHead->filhead; while(q) { if(q->next==p) { q->next=p->next; delete p; printf("success\n"); return ; } q=q->next; }}void Int(){ Head = new dir; Head->dirhead = new dir; Head->filhead= new fil; Head->next=NULL; Head->up=Head; NowHead=Head; Head->dirhead->next=NULL; Head->filhead->next=NULL;}int main() { char s[10]; Int(); while(~scanf("%s",s)) { if(!strcmp(s,"CD")) doCD(); else if(!strcmp(s,"MD")) doMD(); else if(!strcmp(s,"RD")) doRD(); else if(!strcmp(s,"CREATE")) doCREATE(); else if(!strcmp(s,"DELETE")) doDELETE(); } return 0;}
0 0
- 文件系统 HDU - 1413
- HDU-1413文件系统
- hdu-1413-文件系统
- hdu 1413 文件系统
- hdu 1413 文件系统
- hdu 1413文件系统(链表模拟)
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 文件系统
- 第01期:salesforce开发环境的搭建
- 线程池的RejectedExecutionHandler(拒绝策略)
- Ubuntu 下 安装 jdk(以jdk7为例)
- Caffe傻瓜系列(1):数据层及参数
- Docker学习之安装配置及使用详解
- 文件系统 HDU - 1413
- 蓝桥杯基础练习 杨辉三角形
- 洛谷1540 机器翻译
- Android Studio NKD开发之 FFmpeg库的引入--简单播放器(主要验证是否正确引入ffmpeg库)
- 我的代码
- L0,L1,L2范式的区别和应用
- 公用标题栏(TitleBar)
- 数据结构实验之链表三:链表的逆置
- opensuse13.2 plt.show不能显示图片问题