问题 B: Problem E

题目描述
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。

输入
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。

输出
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
样例输入

4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9

样例输出

yes
no
no
no

代码

#include 
#include 
#include 
#include 
using namespace std;

int main()
{
     
    int n;
    scanf("%d",&n);
    char str[1000];
    stack<char> ops;
    for(int i=0;i<n;i++)
    {
     
        scanf("%s",str);
        int len=strlen(str);
        while(!ops.empty())ops.pop();
        int j;
        for(j=0;j<len;j++)
        {
     
            if(str[j]=='{'||str[j]=='['||str[j]=='(')
                ops.push(str[j]);
            else if(str[j]=='}')
            {
     
                if(ops.empty()||ops.top()!='{')
                {
     
                    printf("no\n");
                    break;
                }
                else
                    ops.pop();
            }
            else if(str[j]==']')
            {
     
                if(ops.empty()||ops.top()!='['){
     
                    printf("no\n");
                    break;
                }
                else
                    ops.pop();
            }
            else if(str[j]==')')
            {
     
                if(ops.empty()||ops.top()!='(')
                {
     
                    printf("no\n");
                    break;
                }
                else
                    ops.pop();
            }

        }
        if(ops.empty()&&j==len)
        printf("yes\n");
        else if(j==len&&!ops.empty())
            printf("no\n");
    }
    return 0;
}

你可能感兴趣的:(c++,栈,数据结构)