题目
【问题描述】假设一个算数表达式中可以包含三种符号:圆括号
“(”
和
“)”
、方括号
“[”
和
“]”
和花
括号
“{”
和
“}”
,且这三种括号可按任意的次序嵌套使用(如:
…[…{…}…[…]…]…[…]…
(…)…
)。编写判别给定表达式中所含括号是否正确配对出现的算法。
【输入形式】输入包含上述三种括号的表达式,数值只需用整型数。
【输出形式】匹配输出
OK
,不匹配输出
ERROR
。
【样例输入】
[(30+5)-4]+26 //
表达式以字符串形式输入
【样例输出】
OK //
大写
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void init(Stack *S)
{
S->top=-1;
}
bool empty(Stack *S)
{
return S->top==-1;
}
void push(Stack *S,char e)
{
S->top++;
S->data[S->top]=e;
}
char out(Stack *S)
{
char e=S->data[S->top];
S->top--;
return e;
}
bool is_match(char a,char b)
{
return (a=='(' && b==')')||( a=='[' && b==']')||( a=='{' && b=='}');
}
void is_balance(char *e,Stack *S)
{
for(int i=0;e[i]!='\0';i++)
{
if((e[i]=='(') || (e[i]=='[')|| (e[i]=='{' ))
push(S,e[i]);
else if((e[i]==')') || (e[i]=='}')|| (e[i]==']'))
{
if(empty(S)||!is_match(out(S),e[i]))
{
printf("ERROR");
return;
}
}
}
if(empty(S))
printf("OK");
else{
printf("ERROR");
}
}
int main()
{
char data[MAX_SIZE];
printf("请输入包含括号的表达式:");
scanf("%s", data);
Stack S;
init(&S);
is_balance(data,&S);
return 0;
}