求助,76分剩三个re
  • 板块P1241 括号序列
  • 楼主GPA0
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/1/11 18:46
  • 上次更新2023/10/24 04:42:51
查看原帖
求助,76分剩三个re
916646
GPA0楼主2023/1/11 18:46

Runtime Error. Received signal 11: Segmentation fault with invalid memory reference.

#include<stack>
#include<iostream>
#include<string>
using namespace std;

void mate(char c,stack<int> &st2,stack<char> &st1,int pos,bool *a) {
	if(!st1.empty() && !st2.empty() && (c == ']' && st1.top() == '[') || (c == ')' && st1.top() == '(')) {
		st1.pop();			//弹出已储存的左括号 
		a[pos] = a[st2.top()] = true;		//将已匹配的括号标记 
		st2.pop();			//弹出已储存的左括号位置 
	}
}

int main() {
	string s;
	cin >> s;
	int l = s.length() ;
	bool *a = new bool[l];
	stack<char> stleft;		//储存左括号 
	stack<int> st2;			//储存左括号的位置 
	for(int i = 0; i < l; i++) {
		if(s[i] == '[' || s[i] == '(') {
			stleft.push(s[i]);
			st2.push(i);
		} else if(s[i] == ']' || s[i] == ')') {
			mate(s[i],st2,stleft,i,a);		//匹配左括号 
		}
	}
	
	for(int i = 0; i < l ; i++) {		//输出括号 
		if(a[i] == false && s[i] == ']') {
			cout << '[';
			cout << s[i];
		} else if(a[i] == false && s[i] == ')') {
			cout << '(';
			cout << s[i];
		} else if(a[i] == false && s[i] == '[') {
			cout << s[i];
			cout << ']';
		} else if(a[i] == false && s[i] == '(') {
			cout << s[i];
			cout << ')';
		} else if(a[i] == true)
			cout << s[i];

	}
}
2023/1/11 18:46
加载中...