NKOJ P1085 网页浏览

题目传送门

网页浏览

时间限制 : 1000 MS  

空间限制 : 65536 KB


问题描述

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


思路:

这道题考察的知识点是关于栈的

按照题目的要求一步步操作就行了

1,BACK

把当前显示的网页压入到forword栈中。然后把back栈栈顶的网页弹出作为当前显示的网页。如果back栈为空,那么这条命令就不执行。

if(c == "BACK")
{
	if(back.empty() != 1)
	{
		forword.push(i);
		i = back.top();
		back.pop();
		a++;
		ans[a] = i;
	}
	else
	{
		a++;
		ans[a] = "Ignored";
	}
}

 2,FORWARD

把当前显示的网页压入到back栈中。然后把forward栈栈顶的网页弹出作为当前显示的网页。如果forward栈为空,那么这条命令就不执行。

if(c == "FORWARD")
{
	if(forword.empty() != 1)
	{
		back.push(i);
		i = forword.top();
		forword.pop();
		a++;
		ans[a] = i;
	}
	else
	{
		a++;
		ans[a] = "Ignored";
	}
}

3,VISIT

把当前显示的网页压入到back栈中。然后浏览器显示用户新输入的网址对应的网页。清空forward栈

if(c == "VISIT")
{
	cin>>c;
	back.push(i);
	i = c;
	a++;
	ans[a] = i;
	while(forword.empty() != 1)
	forword.pop();
}

4,QUIT

关闭浏览器

if(c=="QUIT")
    return 0;

 AC代码:

#include <bits/stdc++.h>
using namespace std;
stack<string> back;
stack<string> forword;
string ans[10005];
string c,i = "http://www.acm.org/";
int a = -1;
int main()
{
	while(c != "QUIT")
	{
		cin>>c;
		if(c == "VISIT")
		{
			cin>>c;
			back.push(i);
			i = c;
			a++;
			ans[a] = i;
			while(forword.empty() != 1)
				forword.pop();
		}
		else if(c == "BACK")
		{
			if(back.empty() != 1)
			{
				forword.push(i);
				i = back.top();
				back.pop();
				a++;
				ans[a] = i;
			}
			else
			{
				a++;
				ans[a] = "Ignored";
			}
		}
		else if(c == "FORWARD")
		{
			if(forword.empty() != 1)
			{
				back.push(i);
				i = forword.top();
				forword.pop();
				a++;
				ans[a] = i;
			}
			else
			{
				a++;
				ans[a] = "Ignored";
			}
		}
	}
	for(int x=0; x<a; x++)
		cout<<ans[x]<<endl;
	cout<<ans[a];
	return 0;
}

AC记录


The end

最后:创作不易,点个赞和关注再走吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值