c++括号匹配检验利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/28 12:57:05
![c++括号匹配检验利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正](/uploads/image/z/310693-13-3.jpg?t=c%2B%2B%E6%8B%AC%E5%8F%B7%E5%8C%B9%E9%85%8D%E6%A3%80%E9%AA%8C%E5%88%A9%E7%94%A8%E6%A0%88%E7%BC%96%E5%86%99%E6%BB%A1%E8%B6%B3%E4%B8%8B%E5%88%97%E8%A6%81%E6%B1%82%E7%9A%84%E6%8B%AC%E5%8F%B7%E5%8C%B9%E9%85%8D%E6%A3%80%E9%AA%8C%E7%A8%8B%E5%BA%8F%EF%BC%9A%E5%81%87%E8%AE%BE%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%AD%E5%85%81%E8%AE%B8%E5%8C%85%E5%90%AB%E4%B8%A4%E7%A7%8D%E6%8B%AC%E5%8F%B7%EF%BC%9A%E5%9C%86%E6%8B%AC%E5%8F%B7%E5%92%8C%E6%96%B9%E6%8B%AC%E5%8F%B7%2C%E5%85%B6%E5%B5%8C%E5%A5%97%E7%9A%84%E9%A1%BA%E5%BA%8F%E9%9A%8F%E6%84%8F%2C%E5%8D%B3%28%5B%5D%28%29%29%E6%88%96%5B%28%5B%5D%5B%5D%29%5D%E7%AD%89%E4%B8%BA%E6%AD%A3%E7%A1%AE%E7%9A%84%E6%A0%BC%E5%BC%8F%2C%5B%28%5D%E6%88%96%28%5B%28%29%29%E6%88%96%28%28%29%5D%29%E5%9D%87%E4%B8%BA%E4%B8%8D%E6%AD%A3)
c++括号匹配检验利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正
c++括号匹配检验
利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.输入一个包含上述括号的表达式,检验括号是否配对.
c++括号匹配检验利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正
这是以前做的科学计算的栈以及功能函数,支持小数、多位数、加减乘除、括号运算,会自动判断表达式正误,希望对你有所帮助,当然也包括了括号匹配功能.其实括号匹配功能关键就在于左右大括号小括号的位置以及数量判断.根据实例分析一下很快就能写好算法.
//在In(c)里判断括号是否匹配
//栈及其功能声明部分
//SqStack_theta 为运算符栈
//SqStack_value 为数据栈
//_theta 为运算符栈功能函数标识
//_value 为数据栈功能函数标识
#define STACK_INIT_SIZE 100
#define STACKINCERMENT 5
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
typedef char SElemTypeOPTR;
typedef double SElemTypeOPND;
typedef int Status;
typedef struct
{
\x09SElemTypeOPTR *base;
\x09SElemTypeOPTR *top;
\x09int stacksize;
}SqStack_theta;
Status InitStack_theta(SqStack_theta &s)
{
\x09s.base=(SElemTypeOPTR*)malloc(STACK_INIT_SIZE*sizeof(SElemTypeOPTR));
\x09if(!s.base)exit(OVERFLOW);
\x09s.top=s.base;
\x09s.stacksize=STACK_INIT_SIZE;
\x09return OK;
}
Status Push_theta(SqStack_theta &s,SElemTypeOPTR e)
{
\x09if(s.top-s.base>=s.stacksize)
\x09{
\x09\x09s.base=(SElemTypeOPTR*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPTR));
\x09\x09if(!s.base)exit(OVERFLOW);
\x09\x09s.top=s.base+s.stacksize;
\x09\x09s.stacksize+=STACKINCERMENT;
\x09};
\x09*s.top++=e;
\x09return OK;
}
Status Pop_theta(SqStack_theta &s,SElemTypeOPTR &e)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09e=*--s.top;
\x09return OK;
}
Status SEmpty_theta(SqStack_theta &s)
{
\x09if(s.base==s.top)return OK;
\x09else return ERROR;
}
Status GetTop_theta(SqStack_theta &s)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09return *(s.top-1);
}
//
// OPND stack
//
typedef struct
{
\x09SElemTypeOPND *base;
\x09SElemTypeOPND *top;
\x09int stacksize;
}SqStack_value;
Status InitStack_value(SqStack_value &s)
{
\x09s.base=(SElemTypeOPND*)malloc(STACK_INIT_SIZE*sizeof(SElemTypeOPND));
\x09if(!s.base)exit(OVERFLOW);
\x09s.top=s.base;
\x09s.stacksize=STACK_INIT_SIZE;
\x09return OK;
}
Status Push_value(SqStack_value &s,SElemTypeOPND e)
{
\x09if(s.top-s.base>=s.stacksize)
\x09{
\x09\x09s.base=(SElemTypeOPND*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPND));
\x09\x09if(!s.base)exit(OVERFLOW);
\x09\x09s.top=s.base+s.stacksize;
\x09\x09s.stacksize+=STACKINCERMENT;
\x09};
\x09*s.top++=e;
\x09return OK;
}
Status Pop_value(SqStack_value &s,SElemTypeOPND &e)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09e=*--s.top;
\x09return OK;
}
SElemTypeOPND GetTop_value(SqStack_value &s)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09return *(s.top-1);
}
//判断优先级 返回int型
//1 >
//0 =
//-1