//栈在括号匹配的应用,判断所给的括号数组是否正确匹配
#include<iostream>
using namespace std;
#include<stack> //C++的STL
//括号数组
char arr[8] = { '(','(',')','(',')','}','}','(' };
//判断左括号与右括号是否匹配
bool isSquare(char left, char right) {
return (left == '(' && right == ')') ||
(left == '[' && right == ']') ||
(left == '{' && right == '}');
}
//判断是否正确匹配
bool judge(char arr[]) {
stack<char> st; //创建一个存放括号的栈
int arr_length = sizeof(arr) / sizeof(arr[0]);//数组长度
for (int i = 0; i < arr_length; i++) { //遍历括号数组
//如果是左括号,就让它进栈
if (arr[i] == '(' || arr[i] == '[' || arr[i] == '{') {
st.push(arr[i]);
}
//如果是右括号,并且此时栈是空的
else if (st.empty()) {
return false;
}
//是右括号,并且此时栈非空
else {
//栈顶的左括号与arr[i]这个右括号匹配
if (isSquare(st.top(), arr[i])) {
st.pop();
}
//栈顶的左括号与arr[i]这个右括号不匹配
else {
return false;
}
}
}
return st.empty();
}
int main() {
cout << judge(arr) << endl;
return 0;
}
栈的应用(括号匹配)
最新推荐文章于 2024-07-25 17:43:13 发布