这道题就是按照题目描述实现的。浏览器的backward和forward设计讲得很明白。
1028 | Accepted | 700K | 16MS | G++ | 1987B |
/*
ID: thestor1
LANG: C++
TASK: poj1028
*/
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <limits>
#include <string>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <cassert>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
string command, currenturl = "http://www.acm.org/";
stack<string> backwardstack, forwardstack;
while (cin >> command && command != "QUIT")
{
// VISIT : Push the current page on the top of the backward stack, and make the URL specified the new current page.
// The forward stack is emptied.
if (command == "VISIT")
{
backwardstack.push(currenturl);
cin >> currenturl;
while (!forwardstack.empty())
{
forwardstack.pop();
}
cout << currenturl << endl;
}
// BACK: Push the current page on the top of the forward stack. Pop the page from the top of the backward stack, making it the new current page.
// If the backward stack is empty, the command is ignored.
else if (command == "BACK")
{
if (backwardstack.empty())
{
cout << "Ignored" << endl;
}
else
{
forwardstack.push(currenturl);
currenturl = backwardstack.top();
backwardstack.pop();
cout << currenturl << endl;
}
}
// FORWARD: Push the current page on the top of the backward stack. Pop the page from the top of the forward stack, making it the new current page.
// If the forward stack is empty, the command is ignored.
else if (command == "FORWARD")
{
if (forwardstack.empty())
{
cout << "Ignored" << endl;
}
else
{
backwardstack.push(currenturl);
currenturl = forwardstack.top();
forwardstack.pop();
cout << currenturl << endl;
}
}
else
{
cout << "unkown command:" << command << endl;
assert(false);
}
}
return 0;
}