c语言写一个表达式,判断括号是否匹配
时间: 2024-10-16 19:02:43 浏览: 42
用顺序栈判断表达式中括号是否匹配正确
在C语言中,你可以使用栈数据结构来检查括号是否匹配。这个过程通常涉及到遍历输入的字符串,并使用两个指针(一个指向当前字符,另一个指向栈顶)。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 50
char stack[MAX_STACK_SIZE];
int top = -1;
bool isParenthesesMatch(const char* str) {
for (const char* p = str; *p != '\0'; ++p) {
if (*p == '(' || *p == '{' || *p == '[') {
stack[++top] = *p;
} else if (*p == ')' && top >= 0 && stack[top] == '(') {
top--;
} else if (*p == '}' && top >= 0 && stack[top] == '{') {
top--;
} else if (*p == ']' && top >= 0 && stack[top] == '[') {
top--;
} else {
return false; // 非括号字符且未到达结束或前一个非括号字符对应的闭合括号
}
}
// 如果所有左括号都有相应的右括号,且栈为空,则括号匹配
return top == -1;
}
int main() {
const char* test_strs[] = {"()()", "({})", "({[()]})", "({[()])", "((", "))"};
int num_tests = sizeof(test_strs) / sizeof(test_strs[0]);
for (int i = 0; i < num_tests; i++) {
bool result = isParenthesesMatch(test_strs[i]);
printf("Test %d: '%s'\tMatch: %s\n", i+1, test_strs[i], result ? "Yes" : "No");
}
return 0;
}
```
在这个程序中,`isParenthesesMatch`函数会检查给定的字符串`str`中的括号是否匹配。如果括号匹配,函数返回`true`;否则返回`false`。
阅读全文