POJ 1028 Web Navigation 模拟,应用STL

本文详细阐述了一个网页浏览过程的模拟实现,包括访问、后退、前进等基本操作,并通过使用栈数据结构来高效地处理这些命令。文章进一步解释了如何通过C++语言简化URL的存储与识别问题,使得整个程序更加简洁且易于维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接 POJ 1028

题意:模拟一个网页浏览的过程,给出起始页面,有三种命令:

            ①visit url     即访问某URL,当前页面变为该页。并且清空此页面的所有“前驱”

            ②back         后退,倒退到前一个网页

            ③forward    前进,同理如上

            ④quit           退出,结束整个命令输入,这一行输入不用做任何处理,结束程序即可

很明显是模拟一个先进先出的结构,故用stack,考虑到进行后退操作时,浏览过的页面可能在接下来被再次访问到(即执行forward命令),故再开另一个栈来存储它们

另外,URL的存储问题,最开始写的时候用纯C语言来写,用字符串数组存储URL,这个读入就特别麻烦。。。而且visit命令中visit和要访问的URL是在同一行内的,识别起来很费劲。后来实在受不了了直接用c++里面的string类,问题迎刃而解,代码变得非常简洁。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<cstring>
#include<vector>
#include<string>
#include<cmath>
#include<stack>
//#define file
#define maxn 100010
using namespace std;
string s;
char order[15];
stack<string>s1,s2;
int main()
{
    #ifdef file
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif // file
    s1.push("http://www.acm.org/");
    while(cin>>order)
    {
        if(order[0]=='Q')
            break;
        else if(order[0]=='V')
        {
            cin>>s;
            s1.push(s);
            string tmp=s1.top();
            cout<<tmp<<endl;
            while(!s2.empty())s2.pop();
        }
        else if(order[0]=='B')
        {
            s=s1.top();
            s1.pop();
            if(!s1.empty())
            {
                s2.push(s);
                cout<<s1.top()<<endl;
            }
            else
            {
                s1.push(s);
                cout<<"Ignored"<<endl;
            }
        }
        else
        {
            if(!s2.empty())
            {
                s=s2.top();
                s2.pop();
                s1.push(s);
                cout<<s1.top()<<endl;
            }
            else
            {
                cout<<"Ignored"<<endl;
            }

        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值