0

下面我上传了一个代码来检查字符串中的括号是否平衡或不使用堆栈。它适用于 1 个输入,但对于多个测试用例,正确的输出不起作用。请帮助。提前致谢。

int main()
{
    int t;
    cin >>t;
    cin.ignore();
    while(t--)
    {
        {

            stack s;
            char *st;
            st=new char[100];
            gets(st);

            s.create(strlen(st));

            if(!count_elem(st))//counts if the brackets are in pairs or not
                cout << "NO" <<endl;
            else
            func1(s,st);

        }
    }
    return 0;
}


void func1(stack s,char *st)
{
    static int i=0,flag=0;
   // printf("%d %d\n",i,flag);
    if(st[i]=='(' || st[i]=='{' || st[i]=='[')
    {
        flag=1;
        s.push(st[i]);
    }
    else
        {
            if(s.isEmpty())
                flag=0;
            else
            {

                if(st[i]=='}')
                    {
                        //printf("%c\n",s.get_top());
                        if(s.get_top()=='{')
                        {
                            flag=1;
                            s.pop();

                        }
                        else
                            flag=0;

                     }

                if(st[i]==')')
                    {
                        //printf("%c\n",s.get_top());
                        if(s.get_top()=='(')
                        {
                            flag=1;
                            s.pop();

                        }
                        else
                            flag=0;

                    }

            if (st[i]==']')
                    {
                        //printf("%c\n",s.get_top());
                        if(s.get_top()=='[')
                        {
                            flag=1;
                            s.pop();

                        }
                        else
                            flag=0;

                    }
            }
        }
    i++;
    if(flag==1)
    {
        if(i<strlen(st))
        func1(s,st);
        else
            cout << "YES"<<endl;
    }

        else
        cout << "NO"<< endl;



}
4

1 回答 1

0

问题是...当程序从一个测试用例转到另一个测试用例时,它不会重新初始化 i=0,flag=0...因为它们已被声明为静态变量。可以做的是...声明i,flag global....并分配 i=0;flag=0; 就在为每个测试用例进行第一次 func() 调用之前......

    int main()

{
    int t;
    cin >>t;
    cin.ignore();
    while(t--)
    {
        {

            stack s;
            char *st;
            st=new char[100];
            gets(st);

            s.create(strlen(st));

            if(!count_elem(st))
                cout << "NO" <<endl;
            else
            {
              i=0;
              flag=0;
              func1(s,st);

            }


        delete []st;
        }
    }
    return 0;
}
于 2016-01-30T07:26:28.783 回答