括号匹配 发表于 2016-06-12 | 分类于 Algorithm | 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#include<stdio.h>#include<stack>using namespace std;stack<int> s;bool IsLeft(char a){ if(a=='('||a=='['||a=='{') return true; else return false;}bool IsRight(char b){ if(b==')'||b==']'||b=='}') return true; return false;}bool pMatch(char a, char b){ if(a=='('&&b==')') return true; else if(a=='['&&b==']') return true; else if(a=='{'&&b=='}') return true; return false;}bool judge(char* str){ while(*str) { if(IsLeft(*str)) { s.push(*str); } else if(IsRight(*str)) { if(s.empty()==false&&pMatch(s.top(),*str)) { s.pop(); } else { return false; } } str++; } if(s.empty()==false) { return false; } return true;}int main(){ char str[100]; while(scanf("%s",str)!=EOF) { while(s.empty()==false) s.pop(); bool bMatch=judge(str); if(bMatch) printf("Paren Match!\n"); else printf("Paren Unmatch!\n"); } return 0;}