實現簡易 Shell 的 cd 與 pwd 指令:
cd <path>:支援絕對路徑(以 / 開頭)、相對路徑、..(上層目錄)pwd:輸出當前絕對路徑,結尾必須有 /string path,初始 "/"cd 時逐段解析路徑字串:.. 彈出上層目錄,普通目錄名 push_back/ 確保格式統一#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
string path = "/", cmd, arg;
while (n--) {
cin >> cmd;
if (cmd == "pwd") {
cout << path << '\n';
} else { // cd
cin >> arg;
if (arg[0] == '/') path = "/"; // 絕對路徑重置
for (size_t i = (arg[0]=='/'); i < arg.size(); ) {
if (arg[i] == '.') { // 處理 ..
if (path.size() > 1 && path.back() == '/') path.pop_back();
while (!path.empty() && path.back() != '/') path.pop_back();
i += 2; // 跳過 ".."
if (i < arg.size() && arg[i] == '/') ++i;
} else { // 普通目錄
while (i < arg.size() && arg[i] != '/')
path.push_back(arg[i++]);
if (i < arg.size() && arg[i] == '/') ++i;
}
}
if (path.empty() || path.back() != '/') path.push_back('/');
}
}
return 0;
}
/ 開頭、以 / 結尾」的規範形式.. 處理時需防禦根目錄不再上溯string 直接操作比 vector<string> 更簡潔O(L),L 為路徑長度O(總輸入長度)