#include"stack.h"
void Bracket_Match( char *bracket , int num );
void main()
{
char *item; //item相当于一维数组的首地址,该数组存数输入的括号字符
int total; //括号的对数
int count; //括号的总字符数
int i = 0;
printf( "please input the total number of the brackets:\n" );
scanf( "%d", &total );
count = 2 * total;
item = ( char * )malloc( ( count + 1 ) * sizeof( char ) ); //为item指向的一位字符数组分配空间,使用该方法可以实现动态分配数组长度
while( i < count ){ //将输入存数到item指向的存储空间
printf( "please input the brackets:start with<,(,{,[ and end with >,),},]\n" );
scanf( "%s", item + i );
i++;
}
Bracket_Match( item, count );
printf( "%s\n", item );
}
//匹配函数的第一个参数为指向字符的指针(即为存储括号字符的数组的首地址)和一个整数(即为括号字符的总数)
//将左括号字符压栈,用栈顶元素和当前非左括号字符匹配,匹配为一对括号,则将栈顶元素弹出,否则匹配失败,程序结束执行
void Bracket_Match( char *bracket , int num )
{
Lstack stack;
LElemType e;
int i = 0;
//初始化栈结构
InitStack( &stack );
stack.link = NULL;
while( i < num ){
if( *( bracket + i ) == '[' || *( bracket + i ) == '(' || *( bracket + i ) == '{' || *( bracket + i ) == '<' ){
Push( &stack, *( bracket + i ) ); //如果当前字符为以上四种左半边括号字符,则将字符压栈
}
else{ //当前字符为非左括号字符
if( GetTop( &stack, &e ) ){ //第一个字符为左括号字符时即对应栈不为空的情况,获得栈顶元素
if( *( bracket + i ) == ']' ){ //如果当前括号字符是右半边括号]且与栈顶元素成对,则弹出栈顶元素
if( e == '[' )
Pop( &stack, &e );
else{ //否则括号不匹配,程序执行结束
printf("ERROR:the branches don't match\n");
exit( EXIT_FAILURE );
}
}
else if( *( bracket + i ) == ')' ){//如果当前括号字符是右半边括号)且与栈顶元素成对,则弹出栈顶元素
if( e == '(' )
Pop( &stack, &e );
else{ //否则括号不匹配,程序执行结束
printf("ERROR:the branches don't match\n");
exit( EXIT_FAILURE );
}
}
else if( *( bracket + i ) == '}' ){ //如果当前括号字符是右半边括号}且与栈顶元素成对,则弹出栈顶元素
if( e == '{' )
Pop( &stack, &e );
else{ //否则括号不匹配,程序执行结束
printf("ERROR:the branches don't match\n");
exit( EXIT_FAILURE );
}
}
else if( *( bracket + i ) == '>' ){ //如果当前括号字符是右半边括号>且与栈顶元素成对,则弹出栈顶元素
if( e == '<' )
Pop( &stack, &e );
else{ //否则括号不匹配,程序执行结束
printf("ERROR:the branches don't match\n");
exit( EXIT_FAILURE );
}
}
else{ //如果当前括号字符不是括号字符,输入错误,程序执行结束(既不是左括号字符,也不是右括号字符)
printf("ERROR:wrong input\n");
exit( EXIT_FAILURE );
}
}
else{ //输入的第一个字符为非左括号字符导致的栈为空且当前输入的字符也为非左括号字符(此时当前字符为非左括号字符),程序执行结束
printf( "ERROR:wrong input,The first element of the given brackets is not a left type bracket: not<,{,[,(\n" );
exit( EXIT_FAILURE );
}
}
i++;
}
//由于在while循环中一旦出现括号不匹配,程序就会立即执行结束,不会继续向下执行,因此只要能跳出while循环,就表示匹配成功
printf( "CORRECT:the branckets match!\n" );
}

JessicaWind
- 粉丝: 74
最新资源
- 单片机控制的花样流水灯设计大学课程.doc
- 基于上下文信息匹配的消息传输算法的安全策略.docx
- 单片机点阵显示控制电路设计方案.doc
- 基于PLC的电梯控制系统设计24020.doc
- 计算机导论精品-第一章计算机发展史.ppt
- 中小型企业IT项目管理的思考.docx
- 黑客防御:网络编程与安全实践
- 互联网新闻信息服务管理规定.doc
- 信息发布系统管理参数及软件功能介绍.doc
- 智能家居控制系统方案模板.doc
- 高校党建信息化的策略探究.docx
- 大专计算机应用与维护专业胡彬的毕业设计论文.doc
- 全国计算机等级考试四级网络工程师过关练习.doc
- 少数民族地区高职院校计算机专业教师技术技能积累研究.docx
- 推进农业科研事业单位财务信息化的研究.docx
- 中职计算机教学现状及提升策略探讨.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


