前言
括号都是英文字符括号,而且有三类:{}、[]、()
一、核心代码
//括号匹配
bool bracket_match(char* str) {
LinkedStack* tmp_stack = stack_create();
if (tmp_stack == NULL) {
printf("error:stack_create failed in main.\n");
exit(1);
}
char *p = str;
while (*p) {
if (*p == '{') {
stack_push(tmp_stack, '}');
}
if (*p == '[') {
stack_push(tmp_stack, ']');
}
if (*p == '(') {
stack_push(tmp_stack, ')');
}
if (*p == '}' || *p == ']' || *p == ')') {
if (is_empty(tmp_stack) || tmp_stack->top->data != *p) {
stack_destroy(tmp_stack);
return false;
}
stack_pop(tmp_stack);
}
p++;
}
bool ret = is_empty(tmp_stack);
stack_destroy(tmp_stack);
return ret;
}
二、测试源
#include "stack.h"
int main(void) {
char str[] = "{[]1(2)3}";
if (bracket_match(str))
{
printf("括号匹配成功\n");
}
else {
printf("括号匹配失败\n");
}
//stack_destroy(stack);
return 0;
}
三、输出样例
总结
实现逻辑为:
1、遍历,遇见左括号,就将对应的右括号入栈
2、遇见右括号时。如果栈为空或栈顶元素与这个遇见的右括号不一致,则匹配失败。如果栈顶元素即为此右括号,匹配成功,继续遍历,直到遍历完。