//括号匹配
bool match(SqList s, char a[]) {
int i;
char t;
for (i = 0; a[i] != '\0'; i++) {
if (a[i] == '(' || a[i] == '[' || a[i] == '{') {
push(s,a[i]);
}
else {
if (isEmpty(s)) return false; //有多余的右括号
pop(s,t);
//判断栈顶元素是否与当前右括号匹配
if (t == '(' && a[i] != ')') return false;
else if (t == '[' && a[i] != ']') return false;
else if (t == '{' && a[i] != '}') return false;
}
}
return isEmpty(s); // 是否有多余的左括号
}
全部代码
#include <iostream>
using namespace std;
#define MAXSIZE 10
typedef struct {
char data[MAXSIZE];
int top;
}SqList;
void initSqList(SqList &s);
void push(SqList &s, char x);
void pop(SqList &s, char &e);
int getTop(SqList s);
bool isEmpty(SqList s);
void DestorySq(SqList &s);
bool match(SqList s, char a[]);
int main(void) {
SqList s;
initSqList(s);
char a[6];
for (int i = 0; i < 6; i++) {
scanf("%c", &a[i]);
}
printf("%d", match(s,a));
}
//括号匹配
bool match(SqList s, char a[]) {
int i;
char t;
for (i = 0; a[i] != '\0'; i++) {
if (a[i] == '(' || a[i] == '[' || a[i] == '{') {
push(s,a[i]);
}
else {
if (isEmpty(s)) return false; //有多余的右括号
pop(s,t);
//判断栈顶元素是否与当前右括号匹配
if (t == '(' && a[i] != ')') return false;
else if (t == '[' && a[i] != ']') return false;
else if (t == '{' && a[i] != '}') return false;
}
}
return isEmpty(s); // 是否有多余的左括号
}
void initSqList(SqList &s) {
s.top = -1;//栈顶指向栈顶元素
}
void push(SqList &s, char x) {
if (s.top >= MAXSIZE - 1) return; //已经满了
s.data[++s.top] = x;
}
void pop(SqList &s, char &e) {
if (s.top <= -1) return;//已经空了
e = s.data[s.top--];
}
int getTop(SqList s) {
if (s.top <= -1) {
printf("当前栈已经空了\n");
exit(0);
}
return s.data[s.top];
}
void DestorySq(SqList &s) {
s.top = -1;
}
bool isEmpty(SqList s) {
return s.top == -1;
}