括号匹配
对输入的括号进行检测,括号正确匹配如:{ ( [ ] ) { } } 显示正确
括号错误匹配如:{ ( [ ) ] } 显示错误
实现方法:
左括号进栈(右括号不进栈),当遇到右括号时与栈顶元素 匹配 ,匹配成功,出栈 ,依次。。。。
当栈为空时 说明匹配正确 否则 错误
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#pragma warning (disable:4996)
typedef struct stack
{
char arr[100];
int size;
}Stack;
void InitStack(Stack*s)
{
s->size = 0;
}
void DestoryStack(Stack*s)
{
s->size = 0;
}
void PushStack(Stack* s,char ch)
{
s->arr[s->size] = ch;
s->size++;
}
void PopStack(Stack*s)
{
if (s->size)
s->size--;
}
char TopStack(Stack*s)
{
char ch = s->arr[s->size - 1];
return ch;
}
int IsEmptyStack(Stack*s)
{
if (s->size)
return 1;
else
return -1;
}
int Cheek(char arr[])
{
Stack mystack;
InitStack(&mystack);
int size = 0;
char ch;
while (arr[size])
{
size++;
}
for (int i = 0; i < size; i++)
{
ch = arr[i];
switch (ch)
{
case'{':
case'(':
case'[':
PushStack(&mystack, ch);
break;
case'}':
case')':
case']':
{
if (!IsEmptyStack(&mystack))
return -1;
char top = TopStack(&mystack);
if ((top == '{'&&ch == '}')
|| (top == '('&&ch == ')')
|| (top == '['&&ch == ']'))
PopStack(&mystack);
else
return -1;
break;
}
default:
break;
}
}
if (IsEmptyStack(&mystack))
return 1;
else
return -1;
}
int main()
{
char arr[100];
printf("请输入:\n");
gets(arr);//会加/0
int result = Cheek(arr);
if (result > 0)
printf("正确\n");
else
printf("错误\n");
system("pause");
return 0;
}