描述
标准Web浏览器包含在最近访问过的页面之间前后移动的功能。实现这些功能的一种方法是使用两个堆栈来跟踪可以通过前后移动到达的页面。在此问题中,系统会要求您实现此功能。
需要支持以下命令:
BACK:将当前页面推到前向堆栈的顶部。从后向堆栈的顶部弹出页面,使其成为新的当前页面。如果后向堆栈为空,则忽略该命令。
FORWARD:将当前页面推到后向堆栈的顶部。从前向堆栈的顶部弹出页面,使其成为新的当前页面。如果前向堆栈为空,则忽略该命令。
访问:将当前页面推到后向堆栈的顶部,并将URL指定为新的当前页面。清空前向堆栈。
退出:退出浏览器。
假设浏览器最初在URL http://www.acm.org/上加载网页
输入
输入是一系列命令。命令关键字BACK,FORWARD,VISIT和QUIT都是大写的。 URL没有空格,最多包含70个字符。您可以假设任何问题实例在任何时候都不需要每个堆栈中超过100个元素。输入结束由QUIT命令指示。
输出
对于除QUIT之外的每个命令,如果不忽略该命令,则在执行命令后打印当前页面的URL。否则,打印“忽略”。每个命令的输出应该在它自己的行上打印。没有为QUIT命令生成输出。
样例输入
VISIT http://acm.ashland.edu/ VISIT http://acm.baylor.edu/acmicpc/ BACK BACK BACK FORWARD VISIT http://www.ibm.com/ BACK BACK FORWARD FORWARD FORWARD QUIT
样例输出
http://acm.ashland.edu/ http://acm.baylor.edu/acmicpc/ http://acm.ashland.edu/ http://www.acm.org/ Ignored http://acm.ashland.edu/ http://www.ibm.com/ http://acm.ashland.edu/ http://www.acm.org/ http://acm.ashland.edu/ http://www.ibm.com/ Ignored
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
stack<string> s1,s2;
string cmd,URL;
s1.push("http://www.acm.org/");
while(cin>>cmd)
{
if(cmd[0]=='Q')
break;
else if(cmd[0]=='V')
{
cin>>URL;
s1.push(URL);
cout<<URL<<endl;
while(!s2.empty()) //注意这里要将s2清空
s2.pop();
}
else if(cmd[0]=='B')
{
if(s1.size()>1) //注意这里是大于1,即必须有两个或两个以上元素才行,
{ //因为s1的栈顶元素是当前访问的页面,后退一步必须返回到当前栈顶的下一个元素
s2.push(s1.top());
s1.pop();
cout<<s1.top()<<endl;
}
else
cout<<"Ignored"<<endl;
}
else
{
if(!s2.empty())
{
s1.push(s2.top());
cout<<s2.top()<<endl;
s2.pop();
}
else
cout<<"Ignored"<<endl;
}
}
return 0;
}
来源:https://www.cnblogs.com/dongsheng/archive/2012/08/02/2619314.html