网页浏览

该文描述了一个编程任务,要求使用两个栈来模拟浏览器的前进和后退功能。当用户访问新的URL时,当前页面被推入历史栈;BACK命令将当前页回退至上一页面,FORWARD则前进至先前的页面。如果栈为空,则忽略相应操作。示例展示了不同命令序列下的浏览器状态变化。
摘要由CSDN通过智能技术生成

问题描述

网页浏览器都包含有前进和后退功能,以此来快速打开之前你访问过的网页。你的任务就是实现这个功能。实现此功能的常用方法是通过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;
			}
		}
	}
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值