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
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。