#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include <string.h>
/**
* 括号匹配(栈的应用)
* @param arr
* @return 成对括号的个数
*/
int match(char* arr, int len) {
// 用数组模拟一个栈
char stack[100];
int ptr = -1; // 栈顶指针
int res = 0;
for (int i = 0; i < len; ++i) {
char c = arr[i]; // 准备入栈的字符
// 当c为)或]时判断当前栈顶的字符能否与其匹配
if (ptr >= 0 && (c == ')' || c == ']')) {
bool flag = false;
switch(c) {
case ')':
if(stack[ptr] == '(')
flag = true;
break;
case ']':
if(stack[ptr] == '[')
flag = true;
break;
}
// 能够匹配,栈顶元素出栈
if(flag) {
res++;
ptr--;
}
} else {
// 入栈
stack[++ptr] = arr[i];
}
}
return res;
}
int main() {
char arr[100];
scanf("%s", arr);
printf("成对括号个数:%d", match(arr, strlen(arr)));
return 0;
}
利用栈实现括号匹配
最新推荐文章于 2025-06-05 18:27:34 发布