题目描述:输入字符串,判断里面的括号是否匹配。有(),[],{}
#include <stdio.h> char a[1000]; int top = 0;//top points at the first empty element void put_stack(char c) { a[top++] = c; } char pop_stack( ) { char pop = a[top-1]; top--; return pop; } int bracket_pair(char c) { switch (c) { case ')': if (pop_stack() == '(') return 1; break; case ']': if (pop_stack() == '[') return 1; break; case '}': if (pop_stack() == '{') return 1; break; } return 0; } int main(int argc, const char * argv[]) { int flag=1; char c; c = getchar(); while (c != ' ') { switch (c) { case '(':; case '[':; case '{': put_stack(c);break; case ')':; case ']':; case '}': flag = bracket_pair(c); } if (flag==0) break; c = getchar(); } if (flag==1&&top==0) { printf("yes"); }else{ printf("no"); } return 0; }
为了保证括号真正匹配,一旦读入右括号,则与它最近的应该是同等大小的做括号,若是,则将其弹出栈,若不是,就可以立刻判断不匹配。
最后判断指向栈顶的top是否为0来判断是否所有左括号都能被配对。