~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

题目:求字符串[(())]的括号是否匹配,这个题相对比较简易,也记录一下。
思路,左括号就入栈,遇到右括号就出栈一个元素进行匹配判定,构造一个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;       
}

 

posted on 2016-03-20 08:37  LuoTian  阅读(664)  评论(0编辑  收藏  举报