北邮OJ-91 文件系统

#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)
      • 这样就避免了输入后再进行划分
  • 没有命名冲突的情况下,利用数组进行操作更为方便

猜你喜欢

转载自blog.csdn.net/a245293206/article/details/86708113