问题链接https://ac.nowcoder.com/acm/problem/15029
#include<bits/stdc++.h>
using namespace std;
int main(){
char p[120];
while(cin>>p){
int l=strlen(p);
stack<char> a;
for(int i=0;i<l;i++){
if(a.empty()){
a.push(p[i]);
}else{
if(a.top()=='O'&&p[i]=='O'){
a.pop();
}
else if(a.top()=='o'&&p[i]=='o'){
a.pop();
if(!a.empty()&&a.top()=='O'){
a.pop();
}else{
a.push('O');
}
}
else{
a.push(p[i]);
}
}
}
char k[120];
int t=0;
while(!a.empty()){
k[t++]=a.top();
a.pop();
}
for(int i=t-1;i>=0;i--){
cout<<k[i];
}
cout<<endl;
}
return 0;
}
想整理的几点:
1.对于一个字符串的输入输出
char型可以直接用cin cout,也可以用gets();string用getline(cin,a);
2.对于stl中栈的简单应用 stack a;
- a.push() 入栈,将元素加到栈顶
- a.top() 返回栈顶元素
- a.pop() 删除栈顶元素,不返回
- a.empty() 判断栈中是否为空,为空返回true
- a.size() 返回栈中元素的个数
对于题目,就是将oO气泡输入进数组,然后通过入栈出栈的操作,如果是两个小气泡,就合成大气泡,再在栈顶调出一个元素继续判断是不是大气泡,如果是就破掉。同理判断到两个大气泡直接破掉。最后再用数组完成一次倒序,把栈底变成序列首。