描述
假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可相互嵌套,如([{}])或({[][()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式.
输入一串括号
如果输入的右括号多余,输出:Extra right brackets
如果输入的左括号多余, 输出:Extra left brackets
如果输入的括号不匹配,输出:Brackets not match
如果输入的括号匹配,输出:Brackets match
输入
{{{{)))
输出
Brackets not match
样例输入
{([)]}
样例输出
Brackets not match
代码实现:
#include <iostream> using namespace std; typedef char ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode, *LinkStack; void init(LinkStack &s); bool empty(LinkStack s); void push(LinkStack &s, ElemType e); void display(LinkStack s); void pop(LinkStack &s); ElemType top(LinkStack s); int size(LinkStack s); void destroy(LinkStack &s); int match(char *str); int main(void) { char str[100]; cin >> str; int res = match(str); switch(res) { case 0: cout << "Brackets not match" << endl; break; case 1: cout << "Brackets match" << endl; break; case 2: cout << "Extra right brackets" << endl; break; case 3: cout << "Extra left brackets" << endl; break; } return 0; } void init(LinkStack &s) { s = NULL; } bool empty(LinkStack s) { return s == NULL; } void push(LinkStack &s, ElemType e) { LNode *p = new LNode; p -> data = e; p -> next = s; s = p; } void display(LinkStack s) { for(LNode *p = s; p; p = p -> next) cout << p -> data << " "; cout << endl; } void pop(LinkStack &s) { if(empty(s)) return; LNode *p = s; s = s -> next; delete p; } ElemType top(LinkStack s) { return s -> data; } int size(LinkStack s) { int n = 0; LNode *p = s; while(p) { n++; p = p -> next; } return n; } void destroy(LinkStack &s) { LNode *p = s; while(p) { LNode *tmp = p; p = p -> next; delete tmp; } } int match(char *str) { LinkStack s; init(s); for(int i = 0; str[i]; i++) { if(str[i] == '(' || str[i] == '[' || str[i] == '{') push(s, str[i]); else if(str[i] == ')') { if(empty(s)) return 2; else if(top(s) != '(') return 0; else pop(s); } else if(str[i] == ']') { if(empty(s)) return 2; else if(top(s) != '[') return 0; else pop(s); } else if(str[i] == '}') { if(empty(s)) return 2; else if(top(s) != '{') return 0; else pop(s); } } if(empty(s)) return 1; return 3; }