#include <iostream> #include <fstream> #include <cassert> using namespace std; const int defaultSize=2000; template<class T> class Stack { private: T* data; int maxSize; int top; public: Stack(int sz=defaultSize); ~Stack(); void Push(const T &x); bool Pop(); bool GetTop(T &x)const; bool IsEmpty()const; }; template<class T> Stack<T>::Stack(int sz) { top = -1; maxSize = sz; data = new T[maxSize]; } template<class T> Stack<T>::~Stack() { delete []data; } template<class T> void Stack<T>::Push(const T &x) { top++; data[top] = x; } template<class T> bool Stack<T>::Pop() { if(IsEmpty() == true) return false; // x = data[top]; top--; return true; } template<class T> bool Stack<T>::GetTop(T &x)const { if(top == -1) return false; x = data[top]; return true; } template<class T> bool Stack<T>::IsEmpty()const { if(top == -1) return true; return false; } int main() { Stack<char> sta; char ch; char p; int f=0; scanf("%c",&ch); while(ch != '#') { if(ch=='{' || ch=='[' || ch=='(') sta.Push(ch); else { sta.GetTop(p); if(p=='[' && ch==']') { sta.Pop(); } else if(p=='(' && ch==')') { sta.Pop(); } else if(p=='{' && ch=='}') { sta.Pop(); } else { f=1; } } cin>>ch; } if(f==0 && sta.IsEmpty()) cout<<"匹配"<<endl; else cout<<"不匹配"<<endl; return 0; }