括号匹配[栈]
Posted YuRi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了括号匹配[栈]相关的知识,希望对你有一定的参考价值。
题目:求字符串[(())]的括号是否匹配,这个题相对比较简易,也记录一下。
思路,左括号就入栈,遇到右括号就出栈一个元素进行匹配判定,构造一个switch。同时,设置一个监视flag,初始置1,一旦不匹配就将之置为0,也就是以后就不用再比较了。
#include <iostream> using namespace std; #define maxsize 10 typedef struct stack { char a[maxsize]; int top; }stack,*Stack; void push(Stack &s,char ch)/*入栈*/ { s->a[++s->top]=ch; } char pop(Stack &s)/*出栈*/ { char x=s->a[s->top--]; return x; } int main() { int i=0,flag=1; char x; char *string="[(((())))]"; Stack s=(Stack)malloc(sizeof(stack)); s->top=-1; while(string[i]!=‘\0‘) { switch(string[i])/*左括号入栈,右括号出栈*/ { case ‘(‘: push(s,‘(‘); break; case ‘[‘: push(s,‘[‘); break; case ‘)‘: if((x=pop(s))!=‘(‘)/*出栈后进行匹配判定*/ flag=0; break; case ‘]‘: if((x=pop(s))!=‘[‘) flag=0; break; } i++; if(!flag)/*只要一个不匹配就退出循环*/ break; }; if(flag) printf("mattch"); else printf("no mattch"); return 0; }
以上是关于括号匹配[栈]的主要内容,如果未能解决你的问题,请参考以下文章