266
技術社區[雲棲]
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