Simplify Path
Given an absolute path for a file (Unix-style), simplify it.
For example, path = "/home/", => "/home" path = "/a/./b/../../c/", => "/c"
click to show corner cases.
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". https://discuss.leetcode.com/topic/8678/c-10-lines-solutionC++中的字符串输入gteline(fin,str,'/');这个输入函数的第一个参数是输入流,第二个参数是以string的形式存储的位置,'/'是分隔符,遇到一个分隔符,就将当前截断的值存储,不包含分隔符。直到发生以下3种情况,才会停止:1. 读到文件尾;2. 遇到分界字符
'\n',将把分界字符从输入流中删除,但不存储;3. 读取的字符数达到最大值
思路:将path根据'/'分解成一个个字符串,再处理不同的情况。
string simplifyPath(string path) { string res, tmp; vector stk; stringstream ss(path); while(getline(ss,tmp,'/')) { if (tmp == "" or tmp == ".") continue; if (tmp == ".." and !stk.empty()) stk.pop_back(); else if (tmp != "..") stk.push_back(tmp); } for(auto str : stk) res += "/"+str; return res.empty() ? "/" : res; }
