题目
description:
假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”、方括号“[”和“]”和花括号“{” 和 “}” ,且这三种括号可按任意的次序嵌套使用(如:…[…{…}…[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的程序(已知表达式已存入数据元素为字符的顺序表中)。
input:
输入算术表达式,换行结束。
output:
若给定表达式中所含括号正确配对,则输出 yes,否则输出 no。
sample_input:
[5+(6-3)]-(2+3)]
sample_output:
no
思路
分几种情况:
- 遇到前括号’(’、’[’、’{’,直接入栈;
- 遇到后括号’(’、’[’、’{’,查看栈顶元素是否是其对应的前括号,如果不是,则返回0,否则出栈;
- 注意最后还需要判断栈是否为空,是返回1,否则返回0
代码
#include <stdio.h>
#define max 100
int match(char exp[], int n);
int main() {
char exp[max];
int i, r;
int n = 0; //统计输入字符数量
for