class Solution {
public:
string simplifyPath(string path) {
// 栈声明
vector<string> s;
string tmp;
//int ptr = 0;
// 遍历字符串开始进行处理
for (int i = 0; i < path.size(); i++)
{
if (path[i] == '/')
{
// 若当前字符串不为空,为空的话说明是/连起来或者是第一个,当前指针后移即可
if (tmp != "")
{
// 且不为./..,则把当前字符串放进栈里,栈顶指针+1,否则跳过
if (tmp != "." && tmp != "..")
{
s.push_back(tmp);
//ptr++;
}
// 为..,出栈
else if (tmp == "..")
{
if (s.size() > 0)
{
s.pop_back();
//ptr--;
}
}
//tmp恢复成空
tmp = "";
}
}
else
{
tmp += path[i];
}
}
if (tmp == "..")
{
if (s.size() > 0)
{
s.pop_back();
//ptr--;
}
}
else if (tmp != "." && tmp != "")
{
s.push_back(tmp);
}
string ans = "/";
for (int i = 0; i < s.size(); i++)
{
ans += s[i];
ans += "/";
}
if (ans != "/")
{
ans.erase(ans.end() - 1);
}
return ans;
}
};
看样子学编译原理还是有用的,这东西就相当于一个简易的词法分析了~
老顾头不顾腚了,注意边界条件!
明天编译原理考试加油!