poj-1028 -网页导航

Description

Standard web browsers contain features to move backward and forward among the pages recently visited. One way to implement these features is to use two stacks to keep track of the pages that can be reached by moving backward and forward. In this problem, you are asked to implement this. The following commands need to be supported: BACK: Push the current page on the top of the forward stack. Pop the page from the top of the backward stack, making it the new current page. If the backward stack is empty, the command is ignored. FORWARD: Push the current page on the top of the backward stack. Pop the page from the top of the forward stack, making it the new current page. If the forward stack is empty, the command is ignored. VISIT : Push the current page on the top of the backward stack, and make the URL specified the new current page. The forward stack is emptied. QUIT: Quit the browser. Assume that the browser initially loads the web page at the URL http://www.acm.org/

Input

Input is a sequence of commands. The command keywords BACK, FORWARD, VISIT, and QUIT are all in uppercase. URLs have no whitespace and have at most 70 characters. You may assume that no problem instance requires more than 100 elements in each stack at any time. The end of input is indicated by the QUIT command.

Output

For each command other than QUIT, print the URL of the current page after the command is executed if the command is not ignored. Otherwise, print "Ignored". The output for each command should be printed on its own line. No output is produced for the QUIT command.

Sample Input

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

Sample Output

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
题目大意:

标准的web浏览器中包含特性向后和向前移动页面最近访问了。实现这些特性的一种方法是使用两个堆栈跟踪的页面,可以达成的向后和向前移动。这个问题,你问来实现这一点。

以下命令需要支持:

:把当前页面顶部的堆栈。流行的页面的顶端向后堆栈,使其成为新的当前页面。如果向后栈为空,命令将被忽略。

转发:把当前页面向后堆栈的顶部。流行的页面的顶部堆栈,使其成为新的当前页面。如果栈是空,命令将被忽略。

访问:把当前页面顶部的向后堆栈,并使新的当前页面指定的URL。远期栈为空。

退出:退出浏览器。

假定浏览器最初加载web页面URL http://www.acm.org

        说的是栈的模拟,但是我还不能很好的理解运用栈,所以我就这样做了,调试了好半天
#include<iostream>
#include<string>
using namespace std;
int main()
{
   string str[100];
    string s1="http://www.acm.org/",s2;
str[0]=s1;
int q=0,ed=0;
    while(1)
    {cin>>s1;
        if(s1=="QUIT"){break;}

        if(s1=="VISIT")
        {
        cin>>s2;
    q++;
      str[q]=s2;
      cout<<str[q]<<endl;
ed=q;    //每次添加新的url时都要让ed=q;q相当于一直指向当前所指的url下标; 而ed是最后一个输入的url下标。
        }
        if(s1=="BACK")
        {if(q<=0){ cout<<"Ignored"<<endl;}//若把if 和 else 的条件互换,过程会变得更加繁琐;
          else {cout<<str[--q]<<endl;}  

        }
        if(s1=="FORWARD")
        {
         if(q>=ed){  cout<<"Ignored"<<endl;}
            else {cout<<str[++q]<<endl;}

        }

    }


    return 0;
和我思路一样的代码,总觉的人家的简单清晰很多
并且我最后一个bug还是看这个代码找到的

#include<stdio.h>
 char str[200][71]={"http://www.acm.org/"};
int point=0,end=0;
void forword()
{
    if(point>=end) printf("Ignored\n");//我在参考这儿的写法
    else printf("%s\n",str[++point]);
}
void back()
{
    if(point<=0) printf("Ignored\n");
    else printf("%s\n",str[--point]);
}
void vist()
{
    scanf("%s",str[++point]);
    printf("%s\n",str[point]);
    end=point;                                 //在此处更新栈的最终指针
}
int main()
{
    char com[10];
    int g=1;
    while(g)
    {
        scanf("%s",com);
        switch(com[0])
        {
            case 'V':vist();break;
            case 'B':back();break;
            case 'F':forword();break;
            default : g=0;break;
        }
    }
    return 0;
}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术栈

【面试题】2018年最全Java面试通关秘籍第三套!

注:本文是从众多面试者的面试经验中整理而来,其中不少是本人出的一些题目,网络资源众多,如有雷同,纯属巧合!禁止一切形式的碰瓷行为!未经允许禁止一切形式的转载和复...

1291
来自专栏一个番茄说

Swift中防止ptrace依附

在移动开发中,安全是一个很重要的话题,当然安全是没有绝对的,只能说尽可能的提高安全性。在iOS的开发中,为了防止别人窥视我们的App,我们得采用一些手段来进行防...

1253
来自专栏NetCore

[原创]Fluent NHibernate之旅(四)-- 关系(上)

经过了前面三篇的介绍,相信大家对Fluent NHibernate已经有一定的了解了,在我们学习中,Fluent 也已经进入了RTM版本。这次的版本发布离RC版...

2166
来自专栏王大锤

再谈RunLoop

2934
来自专栏王大锤

再谈RunLoop

1353
来自专栏程序员互动联盟

Windows SDK编程基本框架

在Windows平台下,最常见最流行的编程就是MFC编程了,在网上可以搜索出大把的MFC编程相关的文章,今天我们来讨论另外一种windows下的编程模式,即W...

33013
来自专栏张善友的专栏

CLR 4.0 安全模型

在公共语言运行时(CLR)过往的版本中,安全模型一直是最为复杂的模块之一,由于涉及Evidence,CAS策略等机制,难以被用户使用。在Silverlight中...

1938
来自专栏微信公众号:Java团长

即将发布的 JDK 10 有 109 项新特性,你喜欢哪些?

按计划,JDK 10 将于 3 月 20 日正式发布。据前 Oracle 员工 Simon Ritter 的统计,JDK 10 总共包含 109 项新特性。当然...

662
来自专栏菩提树下的杨过

更好用的excel国际化多语言导出

不知道大家在开发中有没有遇到过『excel导出』的需求,反正我最近写了不少这种功能,刚开始利用poi,一行行的手动塞数据,生成excel,而且还有国际化需求,比...

1392
来自专栏跟着阿笨一起玩NET

在大型软件中用Word做报表: 书签的应用

本文转载:http://www.cnblogs.com/huyong/archive/2011/08/24/2151599.html

781

扫码关注云+社区

领取腾讯云代金券