描述
假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可相互嵌套,如([{}])或({[][()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式.
输入一串括号
如果输入的右括号多余,输出: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;
}









