题目描述
标准的web浏览器都有一个功能就是可以在最近访问的页面之间进行前进和后退。实现这一特性的一种方法是使用两个堆栈来跟踪可以通过前进和后退来访问的页面。现在需要你来实现此功能。
系统需要支持以下命令:
BACK:
将当前页面推入前进堆栈的顶部,从后退堆栈的顶部推出页面,使其成为新的当前页面。如果后退堆栈为空,则忽略该命令
FORWARD:
将当前页面推入后退堆栈的顶部,从前进堆栈的顶部推出页面,使其成为新的当前页面。如果前进堆栈为空,则忽略该命令
VISIT:
把当前页面推入后退堆栈的顶部,并将URL指定为新的当前页面,清空前进堆栈
QUIT:
退出浏览器
假设浏览器最初在URL为http://www.acm.org/的页面。
输入格式
输入包含一系列命令,命令的关键词是:BACK,FORWARD,VISIT,QUIT。URL最多包含70个字符且不包含空格。任何时刻堆栈中的元素个数不超过100.
输入结束的命令是QUIT
输出格式
除QUIT命令外,如果这个命令不应该被忽略则输出当前页面执行此命令后的页面的URL,否则输出"Ignored"
输入输出样例
输入样例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
【耗时限制】1000ms 【内存限制】128MB
我只能说,这题完全是为了折磨我们的眼睛而出现的,不过题目本身并不太难,关键是能不能理解题意
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
string s,url="http://www.acm.org/";//定义一下
stack<string> b,f;
int main(){
while(cin>>s&&s!="QUIT"){ //s!="QUIT"是为了判断结束
if(s=="VISIT"){ //如果s是"VISIT"
b.push(url);
cin>>url;
while(!f.empty()) f.pop();
cout<<url<<endl;
}
else if(s=="FORWARD") //如果是"FORWARD"
if(!f.empty()){
b.push(url);
url=f.top();
cout<<url<<endl;
f.pop();
}
else cout<<"Ignored"<<endl;
else //如果是"BACK"
if(!b.empty()){
f.push(url);
url=b.top();
cout<<url<<endl;
b.pop();
}
else cout<<"Ignored"<<endl;
}
return 0;
}
//注:这里不推荐把b.push(url)等移到判断外(应该不行,本人没试过)