#ifndef _STACK_H_ #define _STACK_H_ //by 小E qq 592646022 template<class T> class Stack { public: Stack(); ~Stack(); bool Push(T t); T Pop(); bool Empty(); bool Clear(); int Size(); private: T t; Stack* top; int size; }; template <class T> Stack<T>::Stack() { size=0; top=NULL; } template <class T> Stack<T>::~Stack() { } template <class T> bool Stack<T>::Push(T t) { Stack* pStack=new Stack(); pStack->t=t; pStack->top=top; top=pStack; size++; return true; } template <class T> T Stack<T>::Pop() { T t; Stack* pStack; if(!Empty()) { t=top->t; pStack=top; top=top->top; delete pStack; size--; } return t; } template <class T> bool Stack<T>::Clear() { while(top) { Pop(); } return true; } template <class T> bool Stack<T>::Empty() { if(size>0) return false; return true; } template <class T> int Stack<T>::Size() { return size; } #endif //main.cpp 测试用 #include <iostream> #include "Stack.h" using namespace std; bool match(char* str) //测试括号匹配 { Stack<char> s; while(*str!='/0') { if(*str=='(') { s.Push('('); } else if(*str==')') { if(s.Size()==0) return false; s.Pop(); } str++; } if(s.Size()==0) return true; return false; } int main() { Stack<char> s; char* str; str=new char[100]; cin>>str; if(match(str)) cout<<"匹配"<<endl; else cout<<"不匹配"<<endl; return 0; }