hdu-1413-文件系统

题意 : 题目很好理解。。。。就不重复了。

解法:模拟, 只要调理清晰即可;

我这里用了map存文件夹,用set存文件


//code

#include<iostream>
#include<string>
#include<map>
#include<set>
using namespace std;

struct Dir{

	string name;
	Dir *father;
	map<string, Dir*>m_dir;
	set<string>file;
	friend bool operator < (Dir a, Dir b)
	{
		return a.name<b.name;
	}
}*Begin, *Now;
inline void Suc()
{
	cout<<"success"<<endl;
}
inline void CD(string a)
{
	map<string, Dir*>::iterator it;
	it = Now->m_dir.find(a);
	if(it == Now->m_dir.end()) cout<<"no such directory"<<endl;
	else
	{
		if(it->second->father == NULL) {cout<<"no such directory"<<endl;return;}
		Now = it->second;
		Suc();
	}
}
inline void MD(string a)
{
	map<string, Dir*>::iterator it;
	it = Now->m_dir.find(a);
	if(it != Now->m_dir.end()){
	
		cout<<"directory already exist\n";
		return ;
	}
	Dir *tmp;
	tmp = new Dir;
	tmp->name = a;
	tmp->father = Now;
	Now->m_dir.insert(map<string, Dir*>::value_type(a,tmp));
	Suc();
}
inline void RD(string a)
{
	
	map<string, Dir*>::iterator it;
	it = Now->m_dir.find(a);
	if(it == Now->m_dir.end()|| !it->second->file.empty() || !it->second->m_dir.empty())
	{
		cout<<"can not delete the directory\n";
		return ;
	}
	
	Now->m_dir.erase(a);
	
	Suc();
	
	
}
inline void CREATE(string a)
{
	set<string>::iterator it;
	it = Now->file.find(a);
	if(it != Now->file.end())
	{
		cout<<"file already exist"<<endl;
		return ;
	}
	
	Now->file.insert(set<string>::value_type(a));
	Suc();
}
inline void DELETE(string a)
{
	set<string>::iterator it;
	it = Now->file.find(a);
	if(it == Now->file.end())
	{
		cout<<"no such file"<<endl;
		return ;
	}
	Now->file.erase(a);
	Suc();
}
int main()
{
	Begin = new Dir;
	Begin->name = "Begin";
	Now = new Dir;
	Now->father = Now;
	Begin->father = Now;
	string tmp;
	while(cin>>tmp)
	{
		//getchar();
		if(tmp=="CD")
		{
			cin>>tmp;
			if(tmp=="..")
			{Now = Now->father;Suc();}
			else if(tmp == "\\" ) 
			{Now = Begin->father;Suc();}
			else
				CD(tmp);
		}
		else if(tmp=="MD")
		{
			cin>>tmp;
			if(tmp == "..")
				cout<<"directory already exist\n";
	//		else if(tmp == "\\") cout<<"directory already exist\n";
			else
				MD(tmp);
		}
		else if(tmp=="RD")
		{
			cin>>tmp;
			RD(tmp);
		}
		else if(tmp=="CREATE")
		{
			cin>>tmp;
			CREATE(tmp);
		}
		else if(tmp=="DELETE")
		{
			cin>>tmp;
			DELETE(tmp);
		}
		//getchar();
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值