#include <iostream>
#include <stack>
using namespace std;
class Stack {
public:
Stack() {}
void push(char c) {
s.push(c);
}
char pop() {
if (isEmpty()) {
cout << "栈为空" << endl;
return -1;
}
char top = s.top();
s.pop();
return top;
}
char getTop() {
if (isEmpty()) {
cout << "栈为空" << endl;
return -1;
}
return s.top();
}
bool isEmpty() {
return s.empty();
}
private:
stack<char> s;
};
bool isMatched(const string &str) {
Stack s;
for (char c : str) {
if (c == '(' || c == '[' || c == '{') {
s.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (s.isEmpty()) {
return false;
}
char top = s.pop();
if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
return false;
}
}
}
return s.isEmpty();
}
int main() {
string input;
cout << "请输入括号序列(以#结束):";
cin >> input;
if (input.back() == '#') {
input.pop_back();
}
if (isMatched(input)) {
cout << "匹配" << endl;
} else {
cout << "不匹配" << endl;
}
return 0;
}