bupt|124. 文件系统

91.文件系统
http://10.105.242.83/problem/124/
题目描述
现在很多操作系统的文件系统都是基于树形结构设计的。即一个目录下可以有若干个目录和文件,而每个目录和文件都可以通过一条从根目录出发的唯一路径来唯一确定。我们希望你实现对这样的一个文件系统的简单管理。
为了简化问题,我们做出如下假设:
假设文件系统初始时只有一个根目录root。
假设所有出现的文件和目录的名字都是唯一的。即,不会有两个相同名字的文件出现,不会有两个相同名字的目录出现,也不会有一个文件和一个目录名字相同。
文件名字和目录名字都是长度在1到20之间的字符串(包括1和20),且只由英文大写字母、英文小写字母、数字组成。大小写字母之间不等效。
你需要实现如下操作:

CREATEFILE FILENAME DIRNAME

这个操作的含义是:在DIRNAME的目录下创建一个名字为FILENAME的文件。我们保证当出现这个操作时,DIRNAME是一个已经存在的目录,而FILENAME这个名字是首次出现。

CREATEDIR DIRNAME1 DIRNAME2

这个操作的含义是:在DIRNAME2的目录下创建一个名字为DIRNAME1的目录。我们保证当出现这个操作时,DIRNAME2是一个已经存在的目录,而DIRNAME1这个名字是首次出现。

LISTFILE DIRNAME

这个操作的含义是:按照创建的先后顺序打印出DIRNAME目录下的所有文件名字。我们保证当出现这个操作时,DIRNAME是一个已经存在的目录.

LISTDIR DIRNAME

这个操作的含义是:按照创建的先后顺序打印出DIRNAME目录下的所有目录名字。我们保证当出现这个操作时,DIRNAME是一个已经存在的目录

输入格式
第一行有一个整数T,表示一共有T(T≤20)组数据需要你处理。请注意各组数据之间是相互独立的。每当处理新的一组数据时,你都应当假设此时只有一个名字为root的根目录存在。
对于每组数据,第一行有一个整数N(0< N≤100),表示有N个操作需要你处理,接下来的N行,每一个行描述了一个操作。

输出格式
对于每个LISTFILE操作和LISTDIR操作,如果找到了X个文件(或目录),你需要输出X行,按照创建时间从早到晚的顺序,每一行打印一个文件(或目录)的名字。如果找到了0个文件(或目录),就不要输出任何东西。请注意不要输出多余的空格和换行符。

输入样例

2
8
CREATEFILE desktop root
CREATEDIR DESKTOP root
LISTFILE root
LISTDIR DESKTOP
CREATEFILE scr20130412 DESKTOP
CREATEFILE scr20130411 DESKTOP
CREATEFILE scr20130413 DESKTOP
LISTFILE DESKTOP
5
LISTFILE root
CREATEDIR webapp root
CREATEDIR myweb webapp
CREATEDIR MyWeb webapp
LISTDIR webapp

输出样例

desktop
scr20130412
scr20130411
scr20130413
myweb
MyWeb
#include<bits/stdc++.h>
using namespace std;
struct dir{
	vector<string> dirs;
	vector<string> files;
};
dir root;
int main(){
	int T,N;
	string op,s1,s2;
	cin>>T;
	while(T--){
		cin>>N;
		map<string,dir> mmap;
		mmap["root"]=root;
		dir tmp;
		while(N--){
			cin>>op;
			if(op=="CREATEFILE"){
				cin>>s1>>s2;
				mmap[s2].files.push_back(s1);
			}else if(op=="CREATEDIR"){
				cin>>s1>>s2;
				mmap[s2].dirs.push_back(s1);
			}else if(op=="LISTFILE"){
				cin>>s1;
				vector<string>::iterator it;
				for(it=mmap[s1].files.begin();it!=mmap[s1].files.end();it++){	
					cout<<*it<<endl;
				}
			}
			else if(op=="LISTDIR"){
				cin>>s1;
				vector<string>::iterator it;
				for(it=mmap[s1].dirs.begin();it!=mmap[s1].dirs.end();it++){	
					cout<<*it<<endl;
				}
			}
		}
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据这个要求The requirements of the project are analyzed here, including: Development Environment, such as OS and programming language  Functional requirements in details, including task decomposition and analysis分析下列1. 实现英文域名的解析,例如: www.bupt.edu.cn; 数据库记录示例: www.bupt.edu.cn,86400,IN,A,192.168.1.25 bupt.edu.cn,86400,IN,MX,mx.bupt.edu.cn mx.bupt.edu.cn,86400,IN,A,192.168.1.37 2. 至少支持 4 个顶级域,至少实现三级域名的解析。程序需要实现的实体有:client、 至少 6 个 DNS server(含 local DNS server)。 4 个顶级域名:.cn、.org、.com、.us 二-三级域名:自定义(例如:edu.cn,bupt.edu.cn 等等) DNS server 的部署架构可参考下图的示例: 3. 支持的 Resource Record 类型:A、MX、CNAME;对于 MX 类型的查询,要求在 Additional Section 中携带对应 IP 地址; 4. 支持的解析方法:迭代解析; 5. 传输层协议: 2 client 与 local DNS server 之间:UDP; DNS server 之间:TCP; 6. 应用层协议:DNS 要求通信过程中使用的所有 DNS 报文必须能够用 wireshark 正确解析; 7. server 的数据维护方式可采用文件; 8. 书写完整的设计文档,参考 Sample-Project-Report.doc; 9. 程序中应包含详细的代码注释,使用良好的编程风格; 10. 程序运行稳定,支持错误处理,如:命令无效、参数缺失、参数错误、查询失败等;
06-05

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值