您的位置:首页 > 其它

一个简单的括号匹配问题

2011-09-10 18:55 323 查看
//***********************************************************//
//***************括号匹配问题 (爱X的味道)****************//
//**********************************************************//
#include<stdio.h>
#include<stdlib.h>
#define STACK_SIZE 100
#define TRUE 1
#define FALSE 0
typedef struct z_node
{
char data[STACK_SIZE];
int top;
}z_stack;
int InitStack(z_stack *stack)
{
stack->top=-1;
return TRUE;
}
int Push(z_stack *stack,char &ch)
{
if(stack->top == STACK_SIZE-1)
return FALSE;
stack->top++;
stack->data[stack->top]=ch;
return TRUE;
}
int Pop(z_stack *stack,char &ch)
{
if(stack->top ==-1)
return FALSE;
ch=stack->data[stack->top];
stack->top--;
return TRUE;
}
int IsEmpty(z_stack *stack)
{
if(stack->top ==-1)
return TRUE;
else
return FALSE;
}
void GetTop(z_stack *stack,char &ch)
{
if(stack->top ==-1)
printf("栈空\n");
else
ch=stack->data[stack->top];
}
int Match(char &stack_top,char &str)
{
if(str ==')' && stack_top =='(')
return TRUE;
if(str == ']' && stack_top=='[')
return TRUE;
if(str =='}' && stack_top=='{')
return TRUE;
return FALSE;
}
void BracketMatch(char *str)
{
z_stack stack;
int i;
char character;
InitStack(&stack);
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case '(':
case '[':
case '{':
Push(&stack,str[i]);
break;
case ')':
case ']':
case '}':
if(IsEmpty(&stack))
{
printf("\n右括号多余\n");
return;
}
else
{
GetTop(&stack,character);
if(Match(character,str[i]))
Pop(&stack,character);
else
printf("\n对应的右括号找不到匹配的左括号\n");
}
}
}
if(IsEmpty(&stack))
printf("\n括号匹配!\n");
else
printf("\n左括号多余!\n");
}
int main()
{
z_stack *stack;
char str[STACK_SIZE];
stack=(z_stack *)malloc(sizeof(z_node));
printf("请输入一个字符串,注意带上括号\n");
gets(str);
BracketMatch(str);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: