- #include
- #include
- #include
- #include
- #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是指向同一个值。