Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- class Folder
- {
- public:
- string name;
- Folder(string name)
- {
- Folder(name, NULL);
- }
- string getFullDirectory()
- {
- string result;
- if(parent != NULL)
- result += parent->getFullDirectory();
- result += '/' + name;
- return result;
- }
- Folder* addFolder(string name)
- {
- Folder *folder = new Folder(name, this);
- folders.push_back(folder);
- return folder;
- }
- Folder* getParent()
- {
- return parent;
- }
- private:
- Folder *parent;
- vector<Folder*> folders;
- Folder(string name, Folder *parent)
- {
- this->name = name;
- this->parent = parent;
- }
- };
- string simplifyPath(std::string path)
- {
- if(path[path.size() - 1] != '/')
- path.push_back('/');
- string currentFolderName = "";
- string result = "";
- Folder *root = new Folder("/");
- Folder *currentFolder = root;
- for(int i = 0; i < path.size(); i++)
- {
- if(path[i] == '/')
- {
- if(currentFolderName == "..")
- currentFolder = currentFolder->getParent();
- else if(currentFolderName != "" && currentFolderName != "/" && currentFolderName != ".")
- currentFolder = currentFolder->addFolder(currentFolderName);
- currentFolderName = "";
- }
- else
- currentFolderName += path[i];
- }
- result = currentFolder->getFullDirectory();
- return result.substr(1, result.size() - 1);
- }
- int main()
- {
- cout << simplifyPath("/a/./b/../../c/") << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement