看到《数据结构》书中,有提到这个栈应用,就自己写个C++实现下~~熟悉下
#include <iostream> using namespace std; #include <stack> #include <string.h> /* 用栈实现,判断(),[]在等式中是否配对正确 几种特殊情况要考虑到, 1.当没有与之配对的栈,则是匹配错误例如:()[]] 2.当退出时候,需要判断栈是否为空,是否都有判断过;例如[() author : cheng 2013.6.9 */ bool is_match(char *s) { int i; char temp; stack<char>m_stack; for(i =0; s[i]!=0;i++) { if(s[i]=='('|| s[i]== '[') m_stack.push(s[i]); else if(s[i]==')' || s[i] == ']') { if(m_stack.size()==0) //当没有与之配对的栈,则是匹配错误()[]] return false; temp = m_stack.top(); switch(temp) { case '(': { if(s[i]==')') { m_stack.pop(); break; } else return false; } case '[': { if(s[i] ==']') { m_stack.pop(); break; } else
return false; } } } else //other char to skip it continue; } if(m_stack.size()==0) //check if all symbol match already 例如:[() return true; else return false; } int main() { char src[1000]; while(scanf("%s",src)!=EOF) { if(is_match(src) == 1) cout<<"match OK!"<<endl; else cout<<"Mis match,Please check it!"<<endl; } return 0; }