【栈】括号匹配

描述假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可相互嵌套,如([{}])或({[][()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式.

输入一串括号
如果输入的右括号多余,输出:Extra right brackets
如果输入的左括号多余, 输出:Extra left brackets
如果输入的括号不匹配,输出:Brackets not match
如果输入的括号匹配,输出:Brackets match输入{{{{)))输出Brackets not match样例输入

{([)]}

样例输出

Brackets not match

 

#include <iostream>
#include <stack>
#include <string>
using namespace std;
stack<char> sta;
int main()
{
  string str;
  cin >> str;
  for (int i = 0; i < str.length(); i++)
  {
    switch (str.at(i))
    {
    case '{':
    case '[':
    case '(':
      sta.push(str.at(i));
      break;
    case ')':
    case ']':
    case '}':
      if (sta.empty()) 
      {
        cout << "Extra right brackets" << endl;
        return 0;
      }
      else
      {
        char a = sta.top(),b= str.at(i);
        if (a=='('&&b==')' || a=='['&&b==']' || a=='{'&&b=='}')
        {
          sta.pop();
          break;
        }
        else { cout << "Brackets not match" << endl; return 0; }
      }
    }


  }
  if (sta.empty()) cout << "Brackets match" << endl;
  else
  {
    cout << "Extra left brackets" << endl;
  }
  return 0;
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

19 − 16 =