问题描述
网页浏览器都包含有前进和后退功能,以此来快速打开之前你访问过的网页。你的任务就是实现这个功能。实现此功能的常用方法是通过forword和back两个栈来保存前进和后退时要打开的网页。下列命令是你需要实现的:
BACK: 把当前显示的网页压入到forword栈中。然后把back栈栈顶的网页弹出作为当前显示的网页。如果back栈为空,那么这条命令就不执行。
FORWARD: 把当前显示的网页压入到back栈中。然后把forward栈栈顶的网页弹出作为当前显示的网页。如果forward栈为空,那么这条命令就不执行。
VISIT : 把当前显示的网页压入到back栈中。然后浏览器显示用户新输入的网址对应的网页。清空forward栈
QUIT: 关闭浏览器
假设只要浏览器一打开就会自动打开网页http://www.acm.org/
输入格式
包含若干条命令,这些命令由BACK,FORWARD,VISIT和QUIT构成。每条命令占一行,长度不超过70。命令的总条数不超过100。一旦出现QUIT表示结束输入命令。
输出格式
对于每个命令,如果它不是QUIT,那么输出命令执行后浏览器显示的网页。如果该命令无法执行,则输出 "Ignored",除QUIT命令外,每一个输入命令对应一行输出结果。
样例输入 1
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
样例输出 1
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
样例输入 2
BACK
BACK
VISIT http://www.facebook.com/
FORWARD
FORWARD
BACK
VISIT http://www.163.com/
VISIT http://www.facebook.com/
VISIT http://acm.ashland.edu/
BACK
QUIT
样例输出 2
Ignored
Ignored
http://www.facebook.com/
Ignored
Ignored
http://www.acm.org/
http://www.163.com/
http://www.facebook.com/
http://acm.ashland.edu/
http://www.facebook.com/
直接按照题目要求模拟,分情况讨论即可
#include<iostream>
#include<stack>
using namespace std;
string a,now,h;
stack<string> f,z;
int main(){
while(cin>>a){
if(a=="QUIT"){
break;
}
if(a=="VISIT"){
cin>>now;
cout<<now<<endl;
z.push(now);
while(!f.empty()){
f.pop();
}
}else if(a=="BACK"){
if(z.size()>1){
h=z.top();
z.pop();
cout<<z.top()<<endl;
f.push(h);
}else if(z.size()==1){
h=z.top();
z.pop();
f.push(h);
cout<<"http://www.acm.org/\n";
}else{
cout<<"Ignored"<<endl;
}
}else if(a=="FORWARD"){
if(f.size()>1){
h=f.top();
f.pop();
cout<<h<<endl;
z.push(h);
}else if(f.size()==1){
h=f.top();
f.pop();
z.push(h);
cout<<h<<endl;
}else{
cout<<"Ignored"<<endl;
}
}
}
}