括号匹配问题
算术表达式中包含圆括号、方括号或花括号三种类型的括号,编写程序判断其中括号是否匹配。
设计要求
- 程序对所输入的表达式能给出适当的提示信息,表达式中包含括号,括号分为圆括号、方括号或花括号。
- 允许使用四则混合运算,以及包含变量的算术表达式。
- 只验证表达式中括号是否匹配,并给出验证结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| #include<stdio.h> #include<stdlib.h>
#define ElemType int #define N 100
typedef struct { ElemType base[N]; int top; }Stack;
void InitStack(Stack* S); void Push(Stack* S, ElemType e); void Pop(Stack* S, ElemType e);
void InitStack(Stack& S) { S.top = -1; }
void Push(Stack& S, ElemType e) { if (S.top == N - 1) printf("栈中无元素"); else S.base[++S.top] = e; }
void Pop(Stack& S, ElemType e) { if (S.top == -1) printf("栈中无元素"); else e = S.base[S.top--]; }
int match(Stack S) { char c; while ((c = getchar()) != '\n') { if (c == '{' || c == '[' || c == '(') Push(S, c); else { switch (c) { case '}': if (S.base[S.top] == '{') Pop(S, c); else Push(S, c); break; case ']': if (S.base[S.top] == '[') Pop(S, c); else Push(S, c); break; case ')': if (S.base[S.top] == '(') Pop(S, c); else Push(S, c); break; default: break; } } } if (S.top == -1) return 1; return 0; }
int main() { Stack OPTR; InitStack(OPTR); if (match(OPTR)) printf("括号匹配"); else printf("括号不匹配");
return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 请输入算术表达式: ((1+2)*3) 括号匹配
请输入算术表达式: ((1+2)*3)) 右括号多于左括号 括号不匹配
请输入算术表达式: [({1+2}*3)] 括号匹配
请输入算术表达式: [({1+2}*3)]} 右括号多于左括号 括号不匹配
请输入算术表达式: ((1+2)*3))+(4*5)) 右括号多于左括号 括号不匹配
|