题目大意
标准的Web浏览器包含可在最近访问的页面之间前进和后退的功能。 实现这些功能的一种方法是使用两个堆栈来跟踪通过向前和向后移动可以到达的页面。 在此问题中,要求您实施此操作。
需要支持以下命令:
BACK:将当前页面推入正向堆栈顶部。 从向后堆栈的顶部弹出页面,使其成为新的当前页面。 如果向后堆栈为空,则忽略该命令。
前进:将当前页面推入后退堆栈的顶部。 从向前堆栈的顶部弹出页面,使其成为新的当前页面。 如果前向堆栈为空,则忽略该命令。
访问:将当前页面推入向后堆栈的顶部,并使URL指定为新的当前页面。 前向堆栈为空。
退出:退出浏览器。
假设浏览器最初是通过URL http://www.acm.org/加载网页的。
思路分析
有几个小坑点
- BACK,FORWARD这两个操作,如果堆栈是空的,是整个command都不执行!当前的url也不会变化。
- 注意当前的url是有初始值的。
#include<iostream>
#include<stack>
#include<string>
using namespace std;
stack<string> forward1, backward;
int main() {
char s[10]; string str, curUrl("http://www.acm.org/");
while (cin >> s) {
int ignored = 0;
if (s[0] == 'Q')break;
if (s[0] == 'V') {
backward.push(curUrl);
cin >> str;
curUrl = str;
while (!forward1.empty()) forward1.pop();
}
else if (s[0] == 'B') {
if (backward.empty()) ignored = 1;
else {
forward1.push(curUrl);
curUrl = backward.top(); backward.pop();
}
}
else if (s[0] == 'F') {
if (forward1.empty()) ignored = 1;
else {
backward.push(curUrl); curUrl = forward1.top(); forward1.pop();
}
}
if (!ignored)cout << curUrl << endl;
else cout << "Ignored" << endl;
}
}