#include <stdio.h>
#include <string>
#include <iostream>
#include "stack.hpp"
int main()
{
    Stack<int> stack;
    int op = 0;
    while (1)
    {
        op = 0;
        printf("选择操作:1入栈2出栈3深度4是否空5栈顶6退出\n");
        scanf("%d", &op);
        switch (op)
        {
        case 1:
            printf("输入\n");
            scanf("%d", &op);
            stack.push(op);
            break;
        case 2:
            printf("出%d \n", stack.pop());
            break;
        case 3:
            printf("深度%d \n", stack.depth());
            break;
        case 4:
            printf("%d \n", stack.empty());
            break;
        case 5:
            printf("%d \n", stack.top());
            break;
        case 6:
            goto Out;
        default:
            break;
        }
    }
Out:
    Stack<char> S;
    std::string exp;
    bool flag = true;
    printf("输入算式\n");
    std::cin >> exp;
    for (int i = 0; i < sizeof(exp); i++)
    {
        switch (exp[i])
        {
        case '(':
        case '[':
        case '{':
            S.push(exp[i]);
            break;
        case ')':
            '(' != S.pop() ? flag = false : 0;
            break;
        case ']':
            '[' != S.pop() ? flag = false : 0;
            break;
        case '}':
            '{' != S.pop() ? flag = false : 0;
            break;
        default:
            break;
        }
    }
    (flag==true&&S.empty()) ? printf("匹配成功\n") : printf("匹配失败\n");
}
