Advertisement
Guest User

Untitled

a guest
Feb 13th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 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.     string getFullDirectory()
  17.     {
  18.         string result;
  19.  
  20.         if(parent != NULL)
  21.             result += parent->getFullDirectory();
  22.  
  23.         result += '/' + name;
  24.  
  25.         return result;
  26.     }
  27.  
  28.     Folder* addFolder(string name)
  29.     {
  30.         Folder *folder = new Folder(name, this);
  31.         folders.push_back(folder);
  32.         return folder;
  33.     }
  34.  
  35.     Folder* getParent()
  36.     {
  37.         return parent;
  38.     }
  39.  
  40. private:
  41.     Folder *parent;
  42.     vector<Folder*> folders;
  43.  
  44.     Folder(string name, Folder *parent)
  45.     {
  46.         this->name = name;
  47.         this->parent = parent;
  48.     }
  49. };
  50.  
  51. string simplifyPath(std::string path)
  52. {
  53.     if(path[path.size() - 1] != '/')
  54.         path.push_back('/');
  55.  
  56.     string currentFolderName = "";
  57.     string result = "";
  58.     Folder *root = new Folder("/");
  59.     Folder *currentFolder = root;
  60.  
  61.     for(int i = 0; i < path.size(); i++)
  62.     {
  63.         if(path[i] == '/')
  64.         {
  65.             if(currentFolderName == "..")
  66.                 currentFolder = currentFolder->getParent();
  67.             else if(currentFolderName != "" && currentFolderName != "/" && currentFolderName != ".")
  68.                 currentFolder = currentFolder->addFolder(currentFolderName);
  69.  
  70.             currentFolderName = "";
  71.         }
  72.         else
  73.             currentFolderName += path[i];
  74.     }
  75.  
  76.     result = currentFolder->getFullDirectory();
  77.  
  78.     return result.substr(1, result.size() - 1);
  79. }
  80.  
  81. int main()
  82. {
  83.     cout << simplifyPath("/a/./b/../../c/") << endl;
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement