括号检验:输入一个代数表达式,表达式只能含有+,-,*,/,(,)以及0到9的非负整数,设表达式除括号匹配外,再无其他错误。编写算法对输入的表达式进行检验,判断括号匹配是否正确。C语言实现
时间: 2024-01-29 19:04:21 浏览: 101
数据结构与算法C++ 括号匹配检验问题
5星 · 资源好评率100%
好的,以下是C语言实现:
``` c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
bool check_parentheses(char* expression);
int main()
{
char expression[100];
printf("请输入代数表达式:");
scanf("%s", expression);
if (check_parentheses(expression))
printf("括号匹配正确!\n");
else
printf("括号匹配错误!\n");
return 0;
}
bool check_parentheses(char* expression)
{
int length = strlen(expression);
char* stack = (char*)malloc(sizeof(char) * length);
int top = -1;
for (int i = 0; i < length; i++) {
if (expression[i] == '(') {
stack[++top] = expression[i];
} else if (expression[i] == ')') {
if (top >= 0 && stack[top] == '(') {
top--;
} else {
free(stack);
return false;
}
}
}
free(stack);
return top == -1;
}
```
这里同样使用了栈的思想, `stack` 为字符型数组, `top` 表示栈顶元素下标。遍历表达式,遇到左括号时将其入栈,遇到右括号时将栈顶元素出栈并与当前右括号进行匹配,如果匹配成功则继续遍历,否则表达式括号匹配失败。
最后,判断栈是否为空,若为空则返回 `true`,否则返回 `false`。
阅读全文