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:
https://discuss.leetcode.com/topic/8678/c-10-lines-solution
- 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"
.
C++中的字符串输入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;
}