【问题描述】
标准的Web浏览器具有在最近访问的页面中前后移动的特性。实现这些特性的一种方法是使用两个堆栈来跟踪可以通过前后移动到达的页面。在这个问题中,我们要求实现这一点。
需要支持以下命令:
BACK:将当前页面压入前向堆栈的顶部;从后向堆栈的顶部弹出该页,使其成为新的当前页。如果后向堆栈为空,则该指令忽略。
FORWARD:将当前页面压入后向堆栈的顶部;从前向堆栈的顶部弹出该页,使其成为新的当前页。如果前向堆栈为空,则该指令忽略。
VISIT:将当前页面压入后向堆栈的顶部,将URL指定为新的当前页。前向堆栈被清空。
QUIT:退出浏览器。
假设浏览器最初在网址http://www.game.org/上加载网页。
【输入形式】输入是一个命令序列。命令关键字BACK、FORWARD、VISIT和QUIT都是大写。URL中无空格,最多有70个字符。假定在任何时候,每个堆栈中没有问题实例需要超过100个元素。输入的结尾由QUIT命令标识。
【输出形式】除QUIT外的每个命令,如果命令没有被忽略,则在命令执行后输出当前页面的URL,否则,打印"Ignored"。每个命令的输出独立打印一行。QUIT命令无输出。
【样例输入】
VISIT http://game.ashland.edu/
VISIT http://game.baylor.edu/acmicpc/
BACK
BACK
BACK
FORWARD
VISIT http://www.our.com/
BACK
BACK
FORWARD
FORWARD
FORWARD
QUIT
【样例输出】
http://game.ashland.edu/
http://game.baylor.edu/acmicpc/
http://game.ashland.edu/
http://www.game.org/
Ignored
http://game.ashland.edu/
http://www.our.com/
http://game.ashland.edu/
http://www.game.org/
http://game.ashland.edu/
http://www.our.com/
Ignored
【样例说明】
【评分标准】
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
string order;
string page = "http://www.game.org/";
stack<string> back, forward;
while (cin >> order)
{
if (order == "QUIT") return 0;
else if (order == "BACK")
{
if (!back.size()) cout << "Ignored" << endl;
else
{
forward.push(page);
page = back.top();
back.pop();
cout << page << endl;
}
}
else if (order == "FORWARD")
{
if (!forward.size()) cout << "Ignored" << endl;
else
{
back.push(page);
page = forward.top();
forward.pop();
cout << page << endl;
}
}
else
{
back.push(page);
cin >> page;
while(!forward.empty()) forward.pop();
cout << page << endl;
}
}
}