括号匹配(C++)

算法思想:

将输入的字符串遍历。

遇到左括号就压栈;遇到右括号,若栈不为空,就将栈顶的左括号取出,匹配返回一个bool值。

若直至遍历结束都没有发生错误且栈为空,则匹配成功。

算法设计:

bool  check(string s)

{    stack<char> p
   bool flag

    for  i  to  s.length() :

            if ( left (s[i]) ) p.push(s[i])

            if ( right(s[i]) ) :

                    if( !s.empty() && match(s.top(),s[i]) ):
                        s.pop()
         
           else flag=false;
}

测试例子:

(()){}

(qw){[]}

 

#include<iostream>
#include<stack>
#include<cstdlib>
#include<cstring>


using namespace std;

bool left(char s)
{
    return s=='('||s=='{'||s=='[';
}
bool right(char s)
{
    return s==')'||s=='}'||s==']';
}
bool check(char a,char b)
{
    return (a=='('&&b==')') || (a=='{'&&b=='}')||(a=='['&&b==']');
}

bool match(string s)
{
    stack<char> p;
    bool flag=true;

    for(int i=0;i<s.length();i++)
    {
       if(left(s[i]))
       {
           p.push(s[i]);
       }
       if(right(s[i]))
       {
           if(!p.empty()&&check(p.top(),s[i]))
           {
               p.pop();
           }
           else flag=false;
       }

    }
    if(!p.empty())flag=false;
    return flag;
}

int main()
{
    int n;
    cin>>n;
    cin.ignore(1, '\n');
    for(int i=0;i<n;i++)
    {

     string str;
     getline(cin,str);//读入string
    if(match(str))
     {
        cout<<"Yes"<<endl;
     }
     else cout<<"No"<<endl;
    }
}

 

 

 

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/moxucui7221/article/details/82706013
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞