题目来源:http://poj.org/problem?id=1028
题目简介:本题要求模拟浏览器的浏览、前进和后退的功能,首先给定两个栈分别为forward和back
(1)浏览时:如果forward栈中有元素则清空,并将输入的URL压入back栈,同时显示back栈顶元素的URL
(2)后退时:将back栈顶的元素压入forward栈中,并将back栈顶的元素弹出
(3)前进时:将forward栈顶的元素压入back栈中,并将forward栈顶的元素弹出
代码实现:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
class WebNavi
{
public:
WebNavi()
{
defaultWeb = "http://www.acm.org/";
}
~WebNavi()
{
}
void visit(string webaddr)
{
while(!forward_stack.empty())
forward_stack.pop();
back_stack.push(webaddr);
print(webaddr);
}
bool back()
{
if(back_stack.empty())
{
return false;
}
else
{
forward_stack.push(back_stack.top());
back_stack.pop();
if(back_stack.empty())
print(defaultWeb);
else
print(back_stack.top());
return true;
}
}
bool forward()
{
if(forward_stack.empty())
return false;
else
{
back_stack.push(forward_stack.top());
forward_stack.pop();
print(back_stack.top());
return true;
}
}
private:
void print(string webaddr)
{
cout << webaddr.c_str() << endl;
}
private:
string defaultWeb;
stack<string> forward_stack;
stack<string> back_stack;
};
int main()
{
WebNavi w;
string webaddr;
string command;
while(true)
{
cin >> command;
if(command == "VISIT")
{
cin >> webaddr;
w.visit(webaddr);
}
else if(command == "BACK")
{
if(!w.back())
cout << "Ignored" << endl;
}
else if(command == "FORWARD")
{
if(!w.forward())
cout << "Ignored" << endl;
}
else if(command == "QUIT")
{
break;
}
command.clear();
webaddr.clear();
}
return 0;
}