LeetCode_Simplify Path
Given an absolute path for a file (Unix-style), simplify it. For example, path = "/home/", => "/home" path = "/a/./b/../../c/", => "/c" Corner Cases: Did you consider the case where path = "/../"? In this case, you should return "/". Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/". In this case, you should ignore redundant slashes and return "/home/foo".
class Solution { public: string simplifyPath(string path) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<string> tp; string res; int len = path.size(); if(len < 1) return string("/"); const char * str = path.c_str(); char buffer[512]; int pos = 0,num; do{ buffer[0] = '\0'; num = sscanf(str + pos,"/%[^/]/",buffer); int size = strlen(buffer); if(size == 0 && num == 0)// case :// pos++; else if( size == 1){ //case :/./ if(buffer[0] != '.') { tp.push_back(string(buffer)); } pos+= 2; }else if(size == 2 && buffer[0] =='.' && buffer[1] == '.'){//case : /../ if(!tp.empty()) tp.pop_back(); pos+=3 ; }else if(size > 1){ //case :normal tp.push_back(string(buffer)); pos = pos + 1 + size; } }while(-1 != num && pos <len ); len = tp.size(); if(len < 1) res+= '/'; for(int i = 0; i< len ; i++) { res+='/'; res+=tp[i]; } return res; } };
--------------------------------------------------------------------天道酬勤!