Advertisement
Guest User

Untitled

a guest
Feb 13th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. class Folder
  7. {
  8. public:
  9.     string name;
  10.  
  11.     Folder(string name)
  12.     {
  13.         Folder(name, NULL);
  14.     }
  15.  
  16.     ~Folder()
  17.     {
  18.         for(int i = 0; i < folders.size(); i++)
  19.             delete folders[i];
  20.        
  21.         folders.clear();
  22.     }
  23.  
  24.     string getFullDirectory()
  25.     {
  26.         string result;
  27.  
  28.         if(parent != NULL)
  29.             result += parent->getFullDirectory();
  30.  
  31.         result += '/' + name;
  32.  
  33.         return result;
  34.     }
  35.  
  36.     Folder* addFolder(string name)
  37.     {
  38.         Folder *folder = new Folder(name, this);
  39.         folders.push_back(folder);
  40.         return folder;
  41.     }
  42.  
  43.     Folder* getParent()
  44.     {
  45.         return parent;
  46.     }
  47.  
  48. private:
  49.     Folder *parent;
  50.     vector<Folder*> folders;
  51.  
  52.     Folder(string name, Folder *parent)
  53.     {
  54.         this->name = name;
  55.         this->parent = parent;
  56.     }
  57. };
  58.  
  59. string simplifyPath(std::string path)
  60. {
  61.     if(path[path.size() - 1] != '/')
  62.         path.push_back('/');
  63.  
  64.     string currentFolderName = "";
  65.     string result = "";
  66.     Folder *root = new Folder("/");
  67.     Folder *currentFolder = root;
  68.  
  69.     for(int i = 0; i < path.size(); i++)
  70.     {
  71.         if(path[i] == '/')
  72.         {
  73.             if(currentFolderName == "..")
  74.                 currentFolder = currentFolder->getParent();
  75.             else if(currentFolderName != "" && currentFolderName != "/" && currentFolderName != ".")
  76.                 currentFolder = currentFolder->addFolder(currentFolderName);
  77.  
  78.             currentFolderName = "";
  79.         }
  80.         else
  81.             currentFolderName += path[i];
  82.     }
  83.  
  84.     delete root;
  85.  
  86.     result = currentFolder->getFullDirectory();
  87.  
  88.     return result.substr(1, result.size() - 1);
  89. }
  90.  
  91. int main()
  92. {
  93.     cout << simplifyPath("/a/./b/../../c/") << endl;
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement