zoukankan      html  css  js  c++  java
  • poj 1057 FILE MAPPING 递归模拟文件系统

     定义结构体

      struct Dir

      {

        vector< Dir > dir;

        vector< string > file;

      };

      通过递归处理, 和输出 就很方便了。

      要注意,当出现子目录时,递归下去处理,回朔后再将其加入到父目录的vector中,不然没有保存到之后的信息。

    解题代码:

    View Code
    #include<algorithm>
    #include<iostream>
    #include<vector>
    #include<string>
    #include<stdio.h>
    
    using namespace std;
    
    struct Dir 
    {
        string name;
        vector<Dir> d;
        vector<string> f;
    };
    void solve( Dir &rt, string s )
    {
            if( (s.at(0) == '*') || (s.at(0) == ']') )    return;
            else if( s.at(0) == 'f' )
            {
                rt.f.push_back(s);    
                cin >> s;    
                solve( rt, s );    
            }    
            else{ 
                Dir sub;sub.name = s;
                
                cin >> s;
                solve( sub, s ); 
                
                rt.d.push_back(sub);
    
                cin >> s;
                solve( rt, s );
            }    
    }
    
    void print(int floor)
    {
        for(int i = 0; i < floor; i++)    
            cout << "|     " ;
    }
    
    void fuck( Dir &rt, int floor )
    {
        //首先输出x本身目录名    
        print(floor);
        cout << rt.name << endl;
        //对于处在floor层的当前目录x,首先输出其子目录     
        for(int i = 0; i < rt.d.size(); i++)
        {
            fuck( rt.d[i], floor+1 );    
        }
        //按字典序号输出文件
        sort( rt.f.begin(), rt.f.end() );    
        for(int i = 0; i < rt.f.size(); i++)
        {
            print(floor);
            cout << rt.f[i] << endl;
        }
    }
    
    int main()
    {
            int T = 1;    
            string s;    
            while( 1 )
            {
                cin >> s;    
                if( s.at(0) == '#' ) break;    
                Dir rt;
                rt.name = "ROOT";
        
                solve( rt, s );
                
                cout << "DATA SET " << T++ << ":" << endl;
                fuck( rt, 0 );    
                cout << endl;    
            }
        return 0;
    }
  • 相关阅读:
    Android JNI用于驱动測试
    shell实例浅谈之三产生随机数七种方法
    WEB安全实战(二)带你认识 XSS 攻击
    前端和云端性能分析工具分析报告
    【翻译】Ext JS——高效的编码风格指南
    dubbo协议
    JavaBean对象转map
    messagePack编解码
    主流编码框架
    java编解码技术,json序列化与二进制序列化
  • 原文地址:https://www.cnblogs.com/yefeng1627/p/2851541.html
Copyright © 2011-2022 走看看