PLANT_now 2016-06-18 22:32 采纳率: 0%
浏览 1267

ACM括号匹配问题 不知道为什么不通过 求大神指点

/*
给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
输入
第一行输入一个正整数N,表示测试数据组数(N<=10)
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100
输出
对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行
样例输入
4
]
样例输出
0
0
3
2

*/

#include
#include
using namespace std;

int main()
{
int num;
cin>>num;
cin.get();
if(num100)
{
cout<<"Please input number 0<n<=100."<<endl;
return 1;
}
char pa[num][10000];

//ÊäÈëÀ¨ºÅ
for(int i=0;i<num;i++)
{
   int k=0;
   char  c;
   while((c=cin.get())!='\n')
    {
        cin.unget();
        cin>>pa[i][k];
        k++;
    }
    if(k==0||k>10000)
    {
        cout<<"Please input correct sharacter."<<endl;
        i--;
    }
}

for(int i=0;i<num;i++)
{
    int j=0;
    int flagc=0;
    int flage=0;
    int flag=0;
    int flag1=0;
    int flag2=0;
    while(pa[i][j]!=NULL)
    {
        if(((pa[i][j]=='('&&(pa[i][j+1]==']')||(pa[i][j]=='['&&pa[i][j+1]==')'))))
        {
                cout<<"NO"<<endl;
                flag1=1;
                flag2=1;
                break;
        }

        if(pa[i][j]=='(')
        {
            flagc++;
        }
        if(pa[i][j]==')')
        {
            if(j==0)
            {
                cout<<"NO"<<endl;
                flag1=1;
                flag2=1;
                break;
            }
            else
            {
                if(flagc>0){flagc--;}
                else
                {
                    cout<<"NO"<<endl;
                    flag1=1;
                    flag2=1;
                    break;
                }
            }
        }
        if(pa[i][j]=='[')
        {
            flage++;
            flag = 1;
        }
        if(pa[i][j]==']')
        {
            if(j==0)
            {
                cout<<"NO"<<endl;
                flag1=1;
                flag2=1;
                break;
            }
            else
            {
                if(flage>0){flage--;}
                else
                {
                    cout<<"NO"<<endl;
                    flag1=1;
                    flag2=1;
                    break;
                }
            }
        }

        j++;
    }
    if(flag1==0&&flagc==0&&flage==0)
        {
            cout<<"YES"<<endl;
        }
    else
    {
        if(flag2!=1)
        {
            cout<<"NO"<<endl;
        }

    }
}
return 0;

}

  • 写回答

1条回答 默认 最新

  • 隐身的稻草人 2016-06-19 00:21
    关注

    用栈和递归来做,遇到前半符号入栈,遇到后半符号出栈,遇到不符直接输出

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料