括号匹配[栈]

题目:求字符串[(())]的括号是否匹配,这个题相对比较简易,也记录一下。
思路,左括号就入栈,遇到右括号就出栈一个元素进行匹配判定,构造一个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]!='')
    {
        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;       
}
原文地址:https://www.cnblogs.com/tinaluo/p/5297112.html