K12000 浏览器导航

题目描述

标准的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)等移到判断外(应该不行,本人没试过)

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值