括号匹配

数据结构实验之栈与队列四:括号匹配
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic Discuss
Problem Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。

Input
输入数据有多组,处理到文件结束。

Output
如果匹配就输出“yes”,不匹配输出“no”

Sample Input
sin(20+10)
{[}]
Sample Output
yes
no

#include <bits/stdc++.h>
using namespace std;
typedef char elemtype;
#define max 1000
typedef struct st
{
    elemtype*base,*top;
    int sqstacklize;
}sqstack;
void creat(sqstack*s)
{
    s->base=(elemtype*)malloc(max*sizeof(elemtype));
    s->top=s->base;
    s->sqstacklize=max;
}
void push(sqstack*s,char e)
{
    s->top++;
    *s->top=e;
}

int empty(sqstack*s)
{
    if(s->top == s->base)
        return 1;
    else
    return 0;
}
void del(sqstack*s)
{
    while(!empty(s))
        s->top--;
}
int main ()
{
    sqstack s;
    creat(&s);
    char l[52];
while(gets(l)!=NULL)  //
    {
    int len=strlen(l);
    int i;
    for(i=0 ;i<len; i++)
    {
        if(l[i] == '('||l[i] == '{'||l[i] == '[')
            push(&s,l[i]);
            if(l[i] == ')')
            {
                if(empty(&s)||*s.top!='(')
                    break;
                    else
                  s.top--;
            }
            if(l[i] == '}')
                {
                    if(empty(&s)||*s.top!= '{')
                        break;
                        else
                    s.top--;
                }
                if(l[i] == ']')
                {
                    if(empty(&s)||*s.top!= '[')
                    break;
                    else
                        s.top--;
                }
    }
    if(i != len)    //此处很关键,防止{{}}}}这种情况下输出yes.
        printf("no\n");
    else
    {
        if(empty(&s))
        printf("yes\n");
    else
        printf("no\n");
    }
    del(&s);//清空栈,如果不加会怎么样鸭鸭?
    }
}

上一篇:FastApi学习(二)


下一篇:数据结构实验之栈与队列八:栈的基本操作