/*对一个合法的数学表达式来说,其中的各大小括号“{”,“}”,“[”,“]”,“(”和“)”应是
相互匹配的。设计算法对以字符串形式读入的表达式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 != ' ') {
if (*p == '(' || *p == '[' || *p == '{') {
pushStack(S, *p);
p++;
continue;
}
if (*p == ')' && S.data[S.top] == '(') {
popStack(S, x);
p++;
continue;
}
else if (*p == '[' && S.data[S.top] == ']') {
popStack(S, x);
p++;
continue;
}
else if (*p == '{' && S.data[S.top] == '}') {
popStack(S, x);
p++;
continue;
}
else break;
}
if (stackEmpty(S)&&*p==' ')
cout << "匹配成功!" << endl;
else
cout << "匹配不成功" << endl;
return 0;
}
想问一下为什么是这一点结果,我感觉检查了没问题