/*对一个合法的数学表达式来说,其中的各大小括号“{”,“}”,“[”,“]”,“(”和“)”应是
相互匹配的。设计算法对以字符串形式读入的表达式S,判断其中的各括号是否是匹配的。
*/
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
#define max 100
typedef int element;
typedef struct sStack {
element data[max];
int top;
}seqStack;
void initialStack(seqStack& S) {
S.top = -1;
}
bool stackFull(seqStack& S) {//判断栈满
if (S.top == max - 1)
return true;
else
return false;
}
bool stackEmpty(seqStack& S) {//判断栈空
if (S.top == -1)
return true;
else
return false;
}
bool stackTop(seqStack& S, element& x) {//取栈顶元素
if (stackEmpty(S))
return false;
else {
x = S.data[S.top];
return true;
}
}
bool pushStack(seqStack& S, element x) {//入栈
if (stackFull(S))
return false;
else {
S.top++;
S.data[S.top] = x;
return true;
}
}
bool popStack(seqStack& S, element x) {
if (stackEmpty(S))
return false;
else {
x = S.data[S.top];
S.top--;
return true;
}
}
bool isSame(char a, char b) {
if (a == '(' && b == ')')
return true;
else if (a == '{' && b == '}')
return true;
else if (a == '[' && b == ']')
return true;
else
return false;
}
int main() {
seqStack S;
initialStack(S);
cout << "输入算数表达式:";
char a[100];
gets_s(a);
char* p = a;
element x;
while (*p) {
switch (*p) {
case'(':
case'[':
case'{':
pushStack(S, *p++);
break;
case')':
case']':
case'}':
if (stackEmpty(S)) {
cout << "缺少左括号" << endl;
return 0;
}
else {
stackTop(S, x);
if (isSame(*p,x))
popStack(S, x);
else
cout << "匹配不成功";
return 0;
}
default: p++;
}
}
if (stackEmpty(S))
cout << "匹配成功!";
else
cout << "匹配不成功";
return 0;
}
想问一下,这里为什么明明是匹配的但是显示不匹配