求助
查看原帖
求助
139509
liufukang楼主2021/3/28 14:45

似乎是爆栈了

我用的栈,没用递归,一番操作点击编译运行结果爆栈……

WA CODE

#include<bits/stdc++.h>
using namespace std;
char ch;//记录每一位的东西
string s;//字符串记录序列
int a,l,op,r,p[200];//分别表示连续a的个数,一个数,操作符,一个数和把符号转为数的数组。(l,r的作用不定)
stack<int>s1;//栈
int main(){
	p['(']=-1,p['|']=0;//预处理,将符号转为某个数
	cin>>s;//读入
	int len=s.size();//方便使用
	for (int i=0;i<len;i++){
		ch=s[i];
		if (ch=='a') a++;//当有字符a读入时a++
		if (ch=='('||ch=='|'){
			s1.push(a);
			a=0;
			s1.push(p[ch]);
		}//如果读入(或|则先将a压进栈并使a=0,再把操作符压进栈)
		if (ch==')'){
			r=s1.top();s1.pop();//得到r
			op=s1.top();s1.pop();//得到操作符
			if (op==-1){//操作符是(
				if (s1.size()&&s1.top()>0){//看栈是否为空且当前栈顶是否有数,比如aa(aa)结果为aaaa
					l=s1.top();s1.pop();//得到l
					s1.push(l+r);//则把l+r的结果压进栈
				}
				else s1.push(r);如果没有数,则直接将a放进栈,比如(aa)结果为aa
			}
			else{//操作符是|
				l=s1.top();//得到l
				s1.push(max(l,r));//将两数最大值放进栈
			}
		}
	}
	printf("%d\n",s1.top());//最后的结果即为栈顶元素
	return 0;
}

感谢

2021/3/28 14:45
加载中...