括号匹配

假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。

Input

5+{[2X5]+2}

Output

YES

Sample Input

8-[{2+7]}

Sample Output

NO

#include <iostream>

#include <stack>

using namespace std;

扫描二维码关注公众号,回复: 1034707 查看本文章

stack<char> a;

#include <stdio.h>

#include <string.h>

int main()

{

   int i,n,p=0,q=0;

   char s[1000],b;

   gets(s);

   n=strlen(s);

   for(i=0;i<n;i++)

    {

       if(s[i]=='{'||s[i]=='['||s[i]=='(')

           a.push(s[i]);

       if(s[i]=='}')

       {

           if(a.empty())

           {

                p=1;

                break;

           }

           b=a.top();

           if(b=='{')

               a.pop();

           else

           {

                p=1;

                break;

           }

       }

       if(s[i]==']')

       {

           if(a.empty())

           {

                p=1;

                break;

           }

           b=a.top();

           if(b=='[')

                a.pop();

           else

           {

                p=1;

                break;

           }

       }

       if(s[i]==')')

       {

           if(a.empty())

           {

                p=1;

                break;

           }

           b=a.top();

           if(b=='(')

                a.pop();

           else

           {

                p=1;

                break;

           }

       }

    }

   if(!a.empty())

       q=1;

   if(p==1||q==1)

       printf("NO\n");

   else

       printf("YES\n");

   return 0;

}

猜你喜欢

转载自blog.csdn.net/zcy19990813/article/details/80328651
今日推荐