以下是使用C语言编写的解答:

#include <stdio.h>
#include <stdlib.h>

#define MAX_LENGTH 100

typedef struct {
    char* data;
    int top;
} Stack;

Stack* createStack() {
    Stack* stack = (Stack*)malloc(sizeof(Stack));
    stack->data = (char*)malloc(MAX_LENGTH * sizeof(char));
    stack->top = -1;
    return stack;
}

void push(Stack* stack, char c) {
    stack->top++;
    stack->data[stack->top] = c;
}

char pop(Stack* stack) {
    char c = stack->data[stack->top];
    stack->top--;
    return c;
}

int isEmpty(Stack* stack) {
    return stack->top == -1;
}

int isMatch(char open, char close) {
    if (open == '(' && close == ')') {
        return 1;
    } else if (open == '[' && close == ']') {
        return 1;
    } else if (open == '{' && close == '}') {
        return 1;
    }
    return 0;
}

int checkBracketMatching(char* str) {
    Stack* stack = createStack();

    for (int i = 0; str[i] != '\0'; i++) {
        char c = str[i];
        if (c == '(' || c == '[' || c == '{') {
            push(stack, c);
        } else if (c == ')' || c == ']' || c == '}') {
            if (isEmpty(stack) || !isMatch(stack->data[stack->top], c)) {
                return 0;
            } else {
                pop(stack);
            }
        }
    }

    int result = isEmpty(stack);
    free(stack->data);
    free(stack);
    return result;
}

int main() {
    char str[MAX_LENGTH];
    scanf('%[^
]', str);

    if (checkBracketMatching(str)) {
        printf('yes\n');
    } else {
        printf('no\n');
    }

    return 0;
}

这个程序使用栈的数据结构来检查给定字符串中的括号是否匹配。首先,创建一个栈,并定义了栈的相关操作函数(createStackpushpopisEmpty)。然后,遍历给定字符串的每个字符,如果是左括号,则将其压入栈中;如果是右括号,则与栈顶的左括号进行匹配,如果匹配成功,则弹出栈顶的左括号,否则返回0。最后,检查栈是否为空,如果为空,则返回1,表示括号匹配成功;否则返回0,表示括号不匹配。

C语言括号匹配检查算法:高效判断字符串括号配对

原文地址: https://www.cveoy.top/t/topic/cGNZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录