括号匹配检测

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41596915/article/details/86583488

判断一组括号是否是左右括号相匹配

用栈存储,输入左括号入栈,等待与之相匹配的右括号,输入相应的右括号,将左括号出栈。最后,如果栈是空栈则匹配成功,否则匹配失败。

栈的结构体定义

typedef struct TagStack{
	char List[MAXSIZE];
	int top;
	int base;
}Stack,*LinkStack;

栈的初始化

void InitStack(LinkStack &S){
	S=new Stack;
	S->top=0;
	S->base=0;
}

左括号入栈

     	case '(':{//判断是左括号,ch入栈
			S->List[S->top+1]=ch;//ch入栈
			S->top++;//栈顶指针后移
			break;
	     	     }
		case '{':{//判断是左括号,ch入栈
			S->List[S->top+1]=ch;//ch入栈
			S->top++;//栈顶指针后移
			break;
				 }

右括号匹配

		case ')':{//判断是右括号,出栈并判断是否匹配成功
			if (S->top!=0){//栈非空
				if (S->List[1]=='('){//匹配成功
					while(S->top>0){//出栈
						S->top--;
					}
				}
			}
			else return 1;//栈空,入栈右括号,结果一定匹配不成功
			break;
	        	 }
		case '}':{//判断是右括号,出栈并判断是否匹配成功
			if (S->top!=0){//栈非空
				if (S->List[1]=='{'){//匹配成功
					while(S->top>0){//出栈
						S->top--;
					}
				}
			}
			else return 1;//栈空,入栈右括号,结果一定匹配不成功
			break;
				 }

源代码

#include <iostream>
using namespace std;
#include <stdlib.h>

#define MAXSIZE 20

typedef struct TagStack{
	char List[MAXSIZE];
	int top;
	int base;
}Stack,*LinkStack;

void InitStack(LinkStack &S){
	S=new Stack;
	S->top=0;
	S->base=0;
}

int Matching(LinkStack &S){
	char ch;
	cout<<"请输入表达式,以#结束:";
	do {
		cin>>ch;
		switch(ch){
		case '(':{//判断是左括号,ch入栈
			S->List[S->top+1]=ch;//ch入栈
			S->top++;//栈顶指针后移
			break;
	     	     }
		case '{':{//判断是左括号,ch入栈
			S->List[S->top+1]=ch;//ch入栈
			S->top++;//栈顶指针后移
			break;
				 }
		case ')':{//判断是右括号,出栈并判断是否匹配成功
			if (S->top!=0){//栈非空
				if (S->List[1]=='('){//匹配成功
					while(S->top>0){//出栈
						S->top--;
					}
				}
			}
			else return 1;//栈空,入栈右括号,结果一定匹配不成功
			break;
	        	 }
		case '}':{//判断是右括号,出栈并判断是否匹配成功
			if (S->top!=0){//栈非空
				if (S->List[1]=='{'){//匹配成功
					while(S->top>0){//出栈
						S->top--;
					}
				}
			}
			else return 1;//栈空,入栈右括号,结果一定匹配不成功
			break;
				 }
		}
	} while (ch!='#');
	return S->top;
}

void main(){
	int flag;
	LinkStack S;
	InitStack(S);
	flag=Matching(S);

	if (flag==1){
		cout<<"栈中元素个数:"<<flag<<endl<<"匹配失败!"<<endl;
	}
	else if(flag==0){
		cout<<"栈中元素个数:"<<flag<<endl<<"匹配成功!"<<endl;
	}
	
	system("pause");
}

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41596915/article/details/86583488