用c语言实现判断一个算术表达式的圆括号是否正确配对
时间: 2023-12-18 14:05:44 浏览: 91
这个问题可以回答。实现的思路是:使用栈来存储左括号,每次遇到右括号则从栈中弹出左括号。最终,如果栈为空,则说明所有左括号都有右括号与之对应;否则,说明有左括号没有右括号与之对应。具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
int is_left_bracket(char c)
{
return (c == '(' || c == '[' || c == '{');
}
int is_right_bracket(char c)
{
return (c == ')' || c == ']' || c == '}');
}
int is_matched(char left, char right)
{
return ((left == '(' && right == ')') ||
(left == '[' && right == ']') ||
(left == '{' && right == '}'));
}
int check_balance(char* expr)
{
char stack[MAX_SIZE];
int top = -1, i;
for (i = 0; expr[i] != '\0'; i++) {
if (is_left_bracket(expr[i])) {
stack[++top] = expr[i];
} else if (is_right_bracket(expr[i])) {
if (top == -1 || !is_matched(stack[top], expr[i])) {
return 0;
} else {
top--;
}
}
}
return (top == -1);
}
int main()
{
char expr[MAX_SIZE];
printf("请输入一个算术表达式:\n");
scanf("%s", expr);
if (check_balance(expr)) {
printf("括号配对正确!\n");
} else {
printf("括号配对错误!\n");
}
return 0;
}
```
一定要注意输入的表达式不要超过数组 `expr` 的长度,否则可能会发生数组越界的错误。
阅读全文