阅读266 返回首页    go 阿里云 go 技术社区[云栖]


Navigation

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

void ClearStack(stack<string> &s);
string getCurentWeb(const string &cmd);

int main()
{
    stack<string> backward,//已经访问的网页
                  forward; //访问下一个网页
    int blocks, i = 0; //接收测试的块数
    vector<string> vec;
    string originalWeb("https://www.acm.org/");
    string curWeb("https://www.acm.org/"); //接收要打开的网页
    string cmdBack("BACK");
    string cmdForward("FORWARD");
    string cmdVISIT("VISIT");
    string cmdQuit("QUIT");
    string ignored("Ignored");
    string cmd;

    cin >> blocks;
    while (i++ < blocks)
    {
        getline(cin, cmd);
        while (cmd != cmdQuit)
        {
            //****************处理VISIT COMMAND******************************
            if (string::npos != cmd.find(cmdVISIT))//找到
            {
                backward.push(curWeb);             //把当前网页压入后退栈
                curWeb = getCurentWeb(cmd);
                //cout << "curWeb=" << curWeb << endl;
                vec.push_back(curWeb);
                ClearStack(forward);               //前进栈置空
            }//**************************************************************
            //****************处理BACK COMMAND*******************************
            else if (cmd == cmdBack)
            {
                if (backward.empty())
                {
                    vec.push_back(ignored);
                    //cout <<"Ignored" << endl;

                }
                else if (curWeb != originalWeb)
                {
                    //cout << "入前进栈的是:" << curWeb << endl;
                    forward.push(curWeb);             //把当前网页压入前进栈
                    curWeb = backward.top();      //取栈顶元素
                    backward.pop();               //删除栈顶元素
                    vec.push_back(curWeb);
                }
            }
            //****************处理FORWARD COMMAND****************************
            else if (cmd == cmdForward)
            {
                if (forward.empty())
                {
                    vec.push_back(ignored);
                   // cout <<"Ignored" << endl;
                }
                else
                {
                    //cout << "入后退栈的是:" << curWeb << endl;
                    backward.push(curWeb);
                    curWeb = forward.top();
                    forward.pop();
                    vec.push_back(curWeb);
                }
            }
            //****************处理完毕***************************************
            getline(cin, cmd);//接收新的命令
        }//结束内层while
        //每一组测试完毕,要清空前进和后退栈
        ClearStack(backward);
        ClearStack(forward);
    }//结束外层while

    for (vector<string>::iterator it = vec.begin(); it != vec.end(); it++)
    {
        cout << *it << endl;
    }

    return 0;
}

//*****************清空栈****************************************************
void ClearStack(stack<string> &s)
{
    while (!s.empty())
    {
        s.pop();
    }
}

//*****************获取当前正要访问的网页*********************************
string getCurentWeb(const string &cmd)
{
    int len = cmd.size();
    string tmp;

    for (int i = 6; i < len; i++)
        tmp += cmd[i];
    //cout << "tmp=" << tmp << endl;
    return tmp;
}

最后更新:2017-04-02 15:15:29

  上一篇:go Maven学习六之利用mvn deploy命令上传包
  下一篇:go iPhone 5纽约上市记:喧嚣与落寞