-为什么不是“解题报告”? -因为这次完全没参考任何题解!
题目大意:
标准的
w
e
b
web
web浏览器靠两个栈来实现页面轮换。要求实现下列命令:
B
A
C
K
BACK
BACK:返回后一页面,如果没有则输出“
I
g
n
o
r
e
d
Ignored
Ignored”。
F
O
R
W
A
R
D
FORWARD
FORWARD:返回前一页面,如果没有则输出“
I
g
n
o
r
e
d
Ignored
Ignored”。
V
I
S
I
T
VISIT
VISIT:访问新的网址,同时清空
F
O
R
W
A
R
D
FORWARD
FORWARD记录。
Q
U
I
T
QUIT
QUIT:结束程序,关闭浏览器,啥也不用输出。对每次操作都要输出操作之后的当前页面。
初始页面为http://www.acm.org/。
分析:
根据题意用两个
s
t
r
i
n
g
string
string类型的栈来维护网页情况,
s
1
s1
s1存
B
A
C
K
BACK
BACK,
s
2
s2
s2存
F
O
R
W
A
R
D
FORWARD
FORWARD。初始时
s
1
s1
s1内有且仅有元素http://www.acm.org/,
s
2
s2
s2为空。做法直接依照题意模拟即可。
读入
B
A
C
K
BACK
BACK时,弹出
s
1
s1
s1顶部元素放入
s
2
s2
s2,再输出
s
1.
t
o
p
(
)
s1.top()
s1.top()。如果
s
1.
s
i
z
e
(
)
s1.size()
s1.size()为
1
1
1(即仅剩初始页面)则不操作并输出“
I
g
n
o
r
e
d
Ignored
Ignored”。读入
F
O
R
W
A
R
D
FORWARD
FORWARD时,弹出
s
2
s2
s2顶部元素放入
s
1
s1
s1,再输出
s
1.
t
o
p
(
)
s1.top()
s1.top()。如果
s
2.
e
m
p
t
y
(
)
s2.empty()
s2.empty()为
真
真
真(即没有前驱页面时)则不操作并输出“
I
g
n
o
r
e
d
Ignored
Ignored”。读入
V
I
S
I
T
VISIT
VISIT时,清空所有前驱页面(即清空
s
2
s2
s2),再读入一个新的页面并加入
s
1
s1
s1。之后输出
s
1.
t
o
p
(
)
s1.top()
s1.top()。读入
Q
U
I
T
QUIT
QUIT时,结束程序。
贴代码:
#pragma GCC optimize(2)
#include<stack>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std
;
stack
<string
>s1
,s2
;
string tmp
;
int main(){
char opt
[10];
s1
.push("http://www.acm.org/");
while(scanf("%s",opt
)){
if(opt
[0]=='Q')break;
if(opt
[0]=='V'){
while(!s2
.empty())s2
.pop();
cin
>>tmp
;
s1
.push(tmp
);
cout
<<s1
.top()<<endl
;
}else if(opt
[0]=='B'){
if(s1
.size()==1){printf("Ignored\n");continue;}
else{
tmp
=s1
.top();s1
.pop();
s2
.push(tmp
);
cout
<<s1
.top()<<endl
;
}
}else if(opt
[0]=='F'){
if(s2
.empty()){printf("Ignored\n");continue;}
else{
tmp
=s2
.top();s2
.pop();
s1
.push(tmp
);
cout
<<s1
.top()<<endl
;
}
}
}
return 0;
}
F
I
N
FIN
FIN
转载请注明原文地址: https://mac.8miu.com/read-500533.html