📄 括号匹配 .cpp
字号:
/*思想:使用一个运算符栈st,当遇到"("、"["、"{"时进栈,当遇到")"、"]"、"}"时判断栈顶是否为相应的括号。
若是,退栈继续进行,否则结束*/
#include<iostream.h>
#include<malloc.h>
#define Len 20 //最多存放Len-1个元素
typedef char elemtype;
typedef struct sqstack
{
elemtype data[Len];
int top;
}stack;
void init(stack *st) //初始化栈st
{
st->top=0;
}
int push(stack *st,elemtype x) //入栈
{
if(st->top==Len-1)
{
cout<<"栈上溢"<<endl;
return 0;
}
else
{
st->top++;
st->data[st->top]=x;
return 1;
}
}
int pop(stack *st,elemtype *x) //退栈
{
if(st->top==0)
{
cout<<"栈下溢"<<endl;
return 0;
}
else
{
*x=st->data[st->top];
st->top--;
return 1;
}
}
int empty(stack *st) //判断栈是否为空栈
{
if(st->top==0) //空时返回1
return 1;
else
return 0;
}
int correct(char *str)
{
stack st;
char x;
int i,ok=1;
init(&st); //初始化栈st
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case '(':
push(&st,'(');break;
case '[':
push(&st,'[');break;
case '{':
push(&st,'{');break;
case ')':
if(!(pop(&st,&x) && x=='('))
ok=0;break;
case ']':
if(!(pop(&st,&x) && x=='['))
ok=0;break;
case '}':
if(!(pop(&st,&x) && x=='{'))
ok=0;break;
}
if(!ok) break;
}
if(empty(&st) && ok)
return 1;
else
return 0;
}
void main()
{
char *str;int a;
str=(char *)malloc(100*sizeof(char));
do
{
cout<<"请输入str:";
cin>>str;
if(correct(str))
cout<<"表达式括号是匹配的"<<endl;
else
cout<<"表达式括号不匹配"<<endl;
cout<<"是否要再输入表达式(1 是 or 0 否)?";
cin>>a;
}while(a);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -