noip信息学一本通1354:括弧匹配检验

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 11867 通过数: 3787
【题目描述】
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。

现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?

输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。输入一个字符串:[([][])],输出:OK。

【输入】
输入仅一行字符(字符个数小于255)。

【输出】
匹配就输出 “OK” ,不匹配就输出“Wrong”。

【输入样例】
[(])
【输出样例】
Wrong
【来源】

No

代码如下:
#include 
#include 
#include 
#include 
using namespace std;
stack<char> v1,v2;
int main()
{
   string ch;
   getline(cin,ch);
   int len=ch.length();
   for(int i=len-1;i>=0;i--)
   {
       if (ch[i]=='('||ch[i]==')'||ch[i]=='['||ch[i]==']') v1.push(ch[i]);

   }

   while(!v1.empty())
   {
          char tp=v1.top();
          v1.pop();
          if (v1.empty())
            {
                v2.push(tp);
               break;
            }
           if (tp=='('&&v1.top()==')'||tp=='['&&v1.top()==']')
           {
               v1.pop();
               if (!v2.empty())
               {
                   v1.push(v2.top());
                   v2.pop();
               }
           }
           else
           {
               v2.push(tp);
           }

   }

   if (v1.empty()&&v2.empty())
    cout<<"OK"<<endl;
   else
    cout<<"Wrong"<<endl;

    return 0;
}

你可能感兴趣的:(NOIP信息学)