思路:题目提示要用两个栈,一个backword回退栈,一个forward向前栈,再定义一个变量表示当前网址就可以了。自己开始做的时候有一个点没有注意,就是在back和forward时先把当前网址入栈,再跳转显示结果网址,然后发现结果不对,想一想,发现了原因,因为如果连续back(forward)一直到栈空,会把栈底网址push进forward(back)栈,然后如果执行forward(back)的话,不会跳转到当前网址的下一个,而是依旧显示当前网址,因为forward(back)的栈顶元素是当前网址。
#include<iostream>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
stack<string> backward,forward;
string type;
string currenturl;
cin>>type;
currenturl="http://www.acm.org/";//当前显示的网址
while(type!="QUIT")
{
if(type=="VISIT")//前往新网址
{
backward.push(currenturl);//把前一个网址入栈
cin>>currenturl;
cout<<currenturl<<endl;
while(!forward.empty())
{
forward.pop();
}
}
else if(type=="BACK")//回退上一个网址
{
if(!backward.empty())
{
forward.push(currenturl);//把前一个网址入栈
currenturl=backward.top();
backward.pop();
cout<<currenturl<<endl;
}
else
cout<<"Ignored"<<endl;
}
else if(type=="FORWARD")//前往后一个网址
{
if(!forward.empty())
{
backward.push(currenturl);//把前一个网址入栈
currenturl=forward.top();
forward.pop();
cout<<currenturl<<endl;
}
else
cout<<"Ignored"<<endl;
}
}
return 0;
}