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