https://vjudge.net/problem/CodeForces-158C
你需要实现类似 Unix / Linux 下的 cd 和 pwd 命令。
一开始,用户处于根目录 / 下。
对于 cd 命令,它的作用是跳转到某个路径。路径有相对路径和绝对路径,相对路径以文件夹名开头,表示当前目录下的文件夹,绝对路径以 / 开头,表示根目录下的文件夹。同时,.. 文件夹表示上一层文件夹。
对于 pwd 命令,你需要输出当前所在的绝对路径。
保证输入数据中所有的文件夹都存在。
用栈记录每次往下搜索的文件夹,先对cd后面的字符串加一个"/",每次遇到../就退回上一级目录(pop)。
具体看代码。
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N = 200005;
const int mod = 1e9 + 7;
#define lowbit(x) (x & (-x))
int main()
{
std::ios::sync_with_stdio(false);
int n;
cin >> n;
stack<string> st, st2;
while (n--)
{
string s;
cin >> s;
if (s[0] == ‘p‘)
{
cout << "/";
while (!st.empty())
{
st2.push(st.top());
st.pop();
}
while (!st2.empty())
{
st.push(st2.top());
cout << st2.top();
st2.pop();
}
cout << endl;
}
else
{
string cur = "";
cin >> s;
s += ‘/‘;
int l = s.length();
for (int i = 0; i < l; i++)
{
cur += s[i];
if (s[i] == ‘/‘)
{
if (cur == "/")
{
while (!st.empty())
st.pop();
}
else if (cur == "../")
{
st.pop();
}
else
{
st.push(cur);
}
cur = "";
}
}
}
}
return 0;
}
原文:https://www.cnblogs.com/mcq1999/p/12028083.html