今天又做了一道题哈,直接上代码,边看边解释
#include <bits/stdc++.h>
using namespace std;
int main(){
stack <string> iin,back;//定义了两个栈,用来表示返回和前进的网站
string m;//定义操作类型变量
int n;
cin >> n;//输入循环次数
for (int i = 0; i<n; i++){
cin >> m;
string u;
if (m == "VISIT"){
cin >> u;
iin.push(u);
cout << iin.top() << endl;
while(!back.empty()){
back.pop();
}
continue;
}//*当输入为“VISIT”时需要将当前访问网站输出,再将保存返回网站的back栈清空
(通常我们自己访问网站时,访问新的网站后,向前返回的箭头按钮就会变得暗
淡,不让点击)*//
if (m == "BACK" && iin.size() != 1 && iin.size() != 0){
back.push(iin.top());
iin.pop();
cout << iin.top() << endl;
continue;
}//当输入为“BACK”时,需要判断保存进入的网站的栈是否为1或0(1是前面没有网站,
0是根本没有打开网站)如不为空或1,则进行返回*//
if (m == "BACK" && iin.size() <= 1){
cout << "Ignore" << endl;
continue;
}//上一种情况的反面,无法执行成功,返回“Ignore”
if (m == "FORWARD" && !back.empty()){
iin.push(back.top());
back.pop();
cout << iin.top() << endl;
continue;
}//*当输入为“FORWARD”时,判断保存前进的网站的栈是否为空,不为空则允许前进
if (m == "FORWARD" && back.empty()){
cout << "Ignore" << endl;
continue;
}//不为空则输出“Ignore”
}
return 0;
}
样例输入:
10
VISIT https://www.showme.com/course/476
VISIT https://www.taobao.com/
BACK
BACK
FORWARD
FORWARD
BACK
VISIT https://www.showme.com/course/429
FORWARD
BACK
样例输出:
https://www.showme.com/course/476
https://www.taobao.com/
https://www.showme.com/course/476
Ignore
https://www.taobao.com/
Ignore
https://www.showme.com/course/476
https://www.showme.com/course/429
Ignore
https://www.showme.com/course/476
运行结果应该是没有错的,但代码仍有许多瑕疵
如果大家有更好的意见请尽管提出,感谢指点