閱讀266 返回首頁    go 微軟 go windows


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紐約上市記:喧囂與落寞