#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include<string.h>
#define stack_size 100
using namespace std;
class stack
{
public:
char element[stack_size];
int top;
};
class op_stack
{
public:
stack my_stack;
void initStack(stack* s)
{
s->top = -1;
}
int isEmpty(stack* s)
{
if (s->top == -1)
{
return 0;
}
else
{
return 1;
}
}
int push(stack* s, char c)
{
if (s->top == stack_size - 1)
{
cout << "栈已经满了" << endl;
return 0;
}
else
{
s->top++;
s->element[s->top] = c;
return 1;
}
}
int pop(stack* s,char* x)
{
if (s->top == -1)
{
cout << "栈没有东西啦" << endl;
}
else
{
*x = s->element[s->top];
s->top--;
return 1;
}
}
int gettop(stack* s, char* x)
{
if (s->top == -1)
{
cout << "没有栈顶元素" << endl;
return 0;
}
else
{
*x = s->element[s->top];
return 0;
}
}
int match(char a, char b)
{
if (a - b == 1 || a - b == 2)
return 1;
else
return 0;
}
int Is_match(char* sentence)
{
char* ptr = sentence;
while (*ptr != '\x00')
{
switch (*ptr)
{
case '{' :
case '[':
case '(':
push(&my_stack,*ptr);
break;
case '}':
case ']':
case ')':
char temp;
gettop(&my_stack, &temp);
if (match(*ptr, temp))
{
pop(&my_stack, &temp);
}
break;
default:
break;
}
ptr++;
}
if (isEmpty(&my_stack)==0)
{
cout << "配对成功" << endl;
return 1;
}
else
{
cout << "配对失败" << endl;
return 0;
}
}
};
int main()
{
op_stack my_op_stack;
my_op_stack.initStack(&my_op_stack.my_stack);
char sentence[500];
cin >> sentence;
my_op_stack.Is_match(sentence);
return 0;
}
要记住的是一开始stack->top要初始化为-1,因为当存第一个值的时候,栈顶RSP和RBP是指向同一个值。