用c++写一段代码,实现判别一个算术表达式中括号配对是否正确匹配。
时间: 2024-05-06 19:19:27 浏览: 94
好的,以下是实现括号匹配判别的 C 代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100 //栈空间大小
// 定义一个栈结构体
typedef struct {
int top; // 栈顶指针
char s[STACK_SIZE]; // 栈空间
} Stack;
// 初始化栈
void init(Stack *st){
st->top = -1;
}
// 入栈
void push(Stack *st, char c){
if (st->top == STACK_SIZE - 1){
printf("栈已满,无法再入栈!\n");
exit(1); //程序异常退出
}
st->top ++;
st->s[st->top] = c;
}
// 出栈
char pop(Stack *st){
if (st->top < 0){
printf("栈已空,无法出栈!\n");
exit(1); //程序异常退出
}
char c = st->s[st->top];
st->top --;
return c;
}
// 用于判断括号是否匹配的函数
int isMatch(char left, char right){
if (left == '(' && right == ')')
return 1;
else if (left == '[' && right == ']')
return 1;
else if (left == '{' && right == '}')
return 1;
else
return 0;
}
// 判断算术表达式中的括号是否匹配
int isParenthesesMatching(char *exp){
Stack st;
init(&st);
int i = 0;
while (exp[i] != '\0'){
if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{'){
push(&st, exp[i]);
}
else if (exp[i] == ')' || exp[i] == ']' || exp[i] == '}'){
if (st.top == -1 || !isMatch(pop(&st), exp[i])){
return 0;
}
}
i ++;
}
if (st.top == -1){
return 1;
}
else{
return 0;
}
}
int main(){
char exp[] = "2 * (3 + 5) - 10 / (4 - 2)]";
if (isParenthesesMatching(exp)){
printf("表达式中的括号匹配!\n");
}
else{
printf("表达式中的括号不匹配!\n");
}
return 0;
}
```
上述代码的主要思路是:使用栈数据结构来存储左括号,当遇到右括号时,取出栈顶元素与之匹配,若匹配则继续遍历,反之说明括号不匹配,返回0. 在遍历完整个表达式后,如果栈为空,则说明所有的括号都已匹配,返回1,反之说明有多余的左括号未被匹配,返回0。
阅读全文