#include<stdio.h>
#include<string.h>
#include<string>
#include<vector>
#include<iostream>
using namespace std;
struct FileSystem
{
string name;//目录名
int no;//目录编号
vector<int> c;//子目录编号
vector<string> v;//目录下的文件名
};
int main()
{
int N;
scanf("%d",&N);
for(int k=1;k<=N;k++)
{
int n;
scanf("%d",&n);
FileSystem * s;
s=new FileSystem[101];//初始化一个数组
int num=1;
s[1].name="root";
s[1].no=1;
for(int i=1;i<=n;i++)//n个操作
{
getchar();
char tmp[101];
scanf("%s",tmp);
if(strcmp(tmp,"CREATEFILE")==0)//创建文件
{
char tmp1[101],tmp2[101];
scanf("%s %s",tmp1,tmp2);
string tt=tmp2;
for(int i=1;i<=num;i++)
if(tt==s[i].name)
{
string file=tmp1;
s[i].v.push_back(file);
}
}
else if(strcmp(tmp,"CREATEDIR")==0)//创建目录
{
char tmp1[101],tmp2[101];
scanf("%s %s",tmp1,tmp2);
string tt=tmp2;
for(int i=1;i<=num;i++)
if(tt==s[i].name)
{
s[num+1].name=tmp1;
s[num+1].no=num+1;
s[i].c.push_back(num+1);
num++;
}
}
else if(strcmp(tmp,"LISTFILE")==0)//打印目录下文件
{
char tmp1[101];
scanf("%s",tmp1);
string tt=tmp1;
for(int i=1;i<=num;i++)
if(tt==s[i].name)
for(int j=0;j<s[i].v.size();j++)
cout<<s[i].v[j]<<endl;
}
else if(strcmp(tmp,"LISTDIR")==0)//打印目录下的目录
{
char tmp1[101];
scanf("%s",tmp1);
string tt=tmp1;
for(int i=1;i<=num;i++)
if(tt==s[i].name)
for(int j=0;j<s[i].c.size();j++)
cout<<s[s[i].c[j]].name<<endl;
}
else
;
}
}
//system("pause");
return 0;
}
- #include <string>
- 结构体构造利用malloc后不能直接赋值,而new可以,因为默认构造法的原因
- scanf使用技巧:
- 格式:scanf("%d / %d",&tmp1,&tmp2);
- 例如输入为:2018/01/03
- 可以利用scanf("%d/%d/%d",&year,&month,&day)
- 这样就避免了输入后再进行划分
- 没有命名冲突的情况下,利用数组进行操作更为方便