用c语言编写输入一个算术表达式,其中包含两种括号:圆括号“()”和方括号“[]”,嵌套顺序任意,编写一个算法用于判别表达式中括弧是否能够正确匹配。
时间: 2023-07-16 15:15:33 浏览: 102
可以用栈来判断表达式中的括号是否匹配。具体实现如下:
1. 声明一个栈,用于存储左括号。
2. 逐个读入表达式中的符号,如果是左括号,则将其压入栈中。
3. 如果是右括号,则弹出栈顶元素,判断是否与该右括号匹配。如果不匹配,则返回错误;如果匹配,则继续读入下一个符号。
4. 如果表达式读取完毕后,栈不为空,则说明还有左括号没有匹配上,返回错误;否则返回正确。
以下是具体的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 50 // 栈的最大容量
char stack[MAX_SIZE]; // 栈
int top = -1; // 栈顶指针
// 压入栈
void push(char ch) {
if (top >= MAX_SIZE - 1) {
printf("Error: stack overflow\n");
exit(1);
}
stack[++top] = ch;
}
// 弹出栈顶元素
char pop() {
if (top < 0) {
printf("Error: stack underflow\n");
exit(1);
}
return stack[top--];
}
// 判断括号是否匹配
int match(char left, char right) {
return (left == '(' && right == ')') || (left == '[' && right == ']');
}
// 判断表达式中的括号是否匹配
int check(char* expr) {
int i = 0;
while (expr[i] != '\0') {
if (expr[i] == '(' || expr[i] == '[') {
push(expr[i]);
} else if (expr[i] == ')' || expr[i] == ']') {
if (top < 0 || !match(pop(), expr[i])) {
return 0; // 括号不匹配,返回错误
}
}
++i;
}
return (top < 0); // 栈为空表示所有括号都匹配上了
}
int main() {
char expr[MAX_SIZE];
printf("请输入算术表达式:");
scanf("%s", expr);
if (check(expr)) {
printf("括号匹配正确\n");
} else {
printf("括号匹配错误\n");
}
return 0;
}
```
阅读全文