#include<stdio.h>
#include<malloc.h>
//判断一个表达式中的括号是否配对
int match(char exp[],int n){ //传入存储表达式的数组以及数组长度
//定义、初始化一个顺序单链表
char stack[n];
int top = -1;
int i;
for(i=0;i<n;++i){ //在i++与++i同等作用下,一般使用++i,因为++i执行效率更高
if(exp[i] == '(') //如果遇到左括号,将左括号入栈
stack[++top] = '('; //先移动指针,再进栈
if(exp[i] == ')') //如果当前遇到右括号,且stack栈为空,则说明当前括号不匹配
if(top == -1) //判断栈空的条件
return 0; //不匹配返回0
else //栈非空时,出栈一个
top--; //出栈操作:栈顶指针减一
}
//所有元素判断完循环结束
if(top == -1)
return 1; //如果栈空,说明所有左括号匹配完全
else
return 0; //否则不匹配
}
int main(){
char exp[5]; //字符串用双引号,字符用单引号
exp[0]='(';
exp[1]='(';
exp[2]=')';
exp[3]=')';
exp[4]=')';
int a;
a = match(exp,5);
if(a == 0)
printf("不匹配\n");
else
printf("匹配\n");
return 1;
}
|