简单模拟题,要求模拟浏览器的四个操作:后退,前进,访问,退出。一些细节问题需要注意。
设置两个栈back和forward,初始back只有一个元素,即主页http://www.acm.org/,forward为空
后退:如果只剩主页,Ignored,否则,1.往forward栈压入back栈顶,2.back弹出,3.输出back栈顶
前进:如果forward栈为空,Ignored,否则,1.输出forward栈顶,2.往back中压入forward栈顶,3.forward弹出
访问:1.输出新网址,2.清空forward栈,3.back栈压入新网址
退出:结束循环
这道题用一个栈应该也是可以解决的,而且可能会更简单。不过那已经不是传统意义的栈了,这次为了熟悉STL,采用了常规的做法,为后退和前进分别设置栈。
附上代码:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
stack<string> back_stack, forward_stack;
string command;
back_stack.push("http://www.acm.org/");
while (cin >> command)
{
if (command == "BACK")
{
if (back_stack.size() == 1)
cout << "Ignored" << endl;
else
{
forward_stack.push(back_stack.top());
back_stack.pop();
cout << back_stack.top() << endl;
}
}
else if (command == "FORWARD")
{
if (forward_stack.empty())
cout << "Ignored" << endl;
else
{
cout << forward_stack.top() << endl;
back_stack.push(forward_stack.top());
forward_stack.pop();
}
}
else if (command == "VISIT")
{
string url;
cin >> url;
cout << url << endl;
while (!forward_stack.empty())
forward_stack.pop();
back_stack.push(url);
}
else if (command == "QUIT")
break;
}
return 0;
}