#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
struct Sqstack
{
int data[MaxSize];
int top=-1;
};
bool Push(Sqstack& S,char x) { //入栈操作
if (S.top > MaxSize) { //栈满
return false;
}
S.data[++S.top] = x;
return true;
}
bool IsEmtpy(Sqstack& S) { //判空
if (S.top == -1) {
return true;
}
else {
return false;
}
}
char Pop(Sqstack& S, char& x) { //出栈
if (IsEmtpy(S)) {
return false;
}
x = S.data[S.top];
S.top--;
return x;
}
bool bracketCheck(char str[], int length) {
Sqstack S;
for (int i = 0; i < length; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') { //若扫描到左括号 入栈
Push(S,str[i]);
}
else
{
if (IsEmtpy(S)) { //若扫描到右括号 判空(如果空则表示没有和左括号匹配的),失败
return false;
}
char topElem;
Pop(S, topElem); //存储出栈的元素
if (str[i]==')'&&topElem != '(') { //如果出栈的不是匹配的括号,失败
return false;
}
if (str[i] == ']' && topElem != '[') {
return false;
}
if (str[i] == '}' && topElem != '{') {
return false;
}
}
}
return IsEmtpy(S); //扫描完以后如果栈空,返回ture 匹配成功
}
void Judeg(bool flag) {
if (flag==true) {
printf("匹配成功!\n");
}
else {
printf("匹配失败!\n");
}
}
int main() { //用例测试
char Symbol1[4] = { '(','(',')',')' };
Judeg(bracketCheck(Symbol1, 4));
char Symbol2[4] = { '(','(',']',')' };
Judeg(bracketCheck(Symbol2, 4));
return 0;
}
C++实现括号匹配
最新推荐文章于 2024-07-23 11:49:26 发布