#include
#include
#include
using namespace std;
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int top;
}stack;
//初始化栈
void Initstack(stack *s){
s->top = -1; //将栈的栈顶指针置为-1,表示栈为空
printf("栈初始化成功\n");
}
//进栈函数
int push(stack *s,char x){
if(s->top >= MAXSIZE - 1){
printf("栈满,无法进栈\n");
return 0; //栈满,上溢
}
else{
s->top++;
s->data[s->top] = x;
printf("已经进栈\n");
return 1;
}
}
//出栈算法
int pop(stack *s,char e){
if(s->top < 0){
printf("栈中已空,无元素可出栈\n");
return 0; //栈空,下溢
}
else{
e = s->data[s->top];
s->top--;
printf("已经出栈\n");
return 1;
}
}
//取栈顶元素算法
char GetTop(stack *s,char e){
if(s->top < 0){
printf("栈为空,无元素可取\n");
return 0; //栈空,没有元素可取
}
else{
printf("将栈顶元素取到e中\n");
e = s->data[s->top];
return e;
}
}
//判断栈空算法
int empty(stack *s){
if(s->top < 0){
printf("栈为空\n");
return 1; //栈空,返回值为1和栈为空
}
else{
printf("栈不为空\n");
return 0; //栈不是空的
}
}
int matching(char *exp,stack *s,int i){
int k = 0,state = 1;
char e;
while (k < i) {
switch (exp[k]){
case '(':{
push(s,exp[k]); k++;
break;
}
case ')': {
if(empty(s) == 0){
if(GetTop(s,e) == '('){
pop(s,e);
k++;
}
else{
printf("与前一个元素不匹配\n");
state = 0;
}
}
else{
state = 0;
}
break;
}
case '[':{
push(s,exp[k]);k++;
break;
}
case ']':{
if(empty(s) == 0){
if(GetTop(s,e) == '['){
pop(s,e);
k++;
}
else{
printf("与前一个元素不匹配\n");
state = 0;
}
}
else{
state = 0;
}
break;
}
case '{':{
push(s,exp[k]);k++;
break;
}
case '}':{
if(empty(s) == 0){
if(GetTop(s,e) == '{'){
pop(s,e);
k++;
}
else{
printf("与前一个元素不匹配\n");
state = 0;
}
}
else{
state = 0;
}
break;
}
default:{
return 2;
}
}
if(state == 0){
return 0;
}
}
return 1;
}
int main(){
char str[100];
stack *sqstack;
int i = 0;
printf("请输入一组要验证的括号\n");
scanf("%s",str);
for(i = 0;str[i] != '\0';i++){
}
printf("%d\n",i);
Initstack(sqstack); //初始化栈
int x = matching(str,sqstack,i);
if(x == 1){
printf("括号匹配\n");
}
else if(x == 0){
printf("括号不匹配\n");
}
else{
printf("输入内容不是括号\n");
}
return 0;
}