题意 : 题目很好理解。。。。就不重复了。
解法:模拟, 只要调理清晰即可;
我这里用了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;
}