题目

源地址:

http://poj.org/problem?id=1028

理解

这是一道STL里面的栈的运用的一个模板题。构建两个栈,一个存放forward,一个存放backward,然后后再建立一个string类用于存放浏览器当前的页面。题目不难,但是要理解你现在的操作对栈影响是什么,先后顺序一点都不能错。

新技能get

std::stack中几个常用的操作 |stack example; |建立一个int型的栈 | |example.push(a); |将a的值放在example栈的最顶端 | |example.top(); |获取example栈当前最顶端的值,此处它的返回值为a的值| |example.pop(); |将example栈最顶端的值丢弃 | |example.empty(); |判断example栈是否为空,是的话返回1,不是的话返回0 |

代码

#include <iostream>
#include <stack>
#include <string>
using namespace std;

stack<string> forward;
stack<string> backward;
string order, tmp, now;

int main(int argc, char const *argv[])
{
    now = "http://www.acm.org/";
    while (cin >> order && order.compare("QUIT"))
    {
        if (!order.compare("VISIT"))
        {
            backward.push(now);
            cin >> now;
            cout << now << endl;
            while (!forward.empty()) forward.pop();
        }
        else if (!order.compare("BACK"))
        {
            if (!backward.empty())
            {
                forward.push(now);
                now = backward.top();
                backward.pop();
                cout << now << endl;
            }
            else
            {
                cout << "Ignored\n";
                continue;
            }
        }
        else if (!order.compare("FORWARD"))
        {
            if (!forward.empty())
            {
                backward.push(now);
                now = forward.top();
                forward.pop();
                cout << now << endl;
            }
            else
            {
                cout << "Ignored\n";
                continue;
            }
        }
    }
    return 0;
}

更新日志

  • 2014年07月20日 已AC。