int matchStack(seqStack& S) {
cout << "输入表达式:";
char a[100];
gets_s(a);
char* p = a;
element x;
char e;
while (*p != '\0') {
switch (*p) {
case'(':
case'{':
case'[':
pushStack(S, *p);
p++;
break;
case')':
case'}':
case']':
if (stackEmpty(S)) {
cout << "缺少左括号!" << endl;
return 0;
}
else {
stackTop(S, e);//栈顶元素
if (isSame(e, *p))
popStack(S, x);
else {
cout << "括号不匹配";
return 0;
}
}
default:
p++;
}
}
if (stackEmpty(S) && *p == '\0')
cout << "匹配成功!" << endl;
else
cout << "匹配不成功" << endl;
}
------------------------------------
int main() {
seqStack S;
initialStack(S);
element x;
int choice = 0;
do {
cout << "**********顺序栈实验测试程序*********************************" << endl;
cout << "*0-退出 " << endl;
cout << "*1-利用顺序栈实现将10进制数转换为x进制数 " << endl;
cout << "*2-判断其中的各括号是否是匹配的 " << endl;
cout << "*3-求出所有可能的出栈序列 " << endl;
cout << "请输入0~3选择你要进行的操作: " << endl;
cin >> choice;
switch (choice) {
case 0: {
cout << "你选择退出";
break;
}
case 1: {
switchStack(S);
break;
}
case 2:
matchStack(S);
break;
写了一个小菜单,为啥情况2单独写的时候可以运行,写在菜单里的时候,输入2按回车直接就输出匹配成功?,也就是matchStack函数
cout << "输入表达式:";
char a[100];
gets_s(a);
char* p = a;
element x;
char e;
while (*p != '\0') {
switch (*p) {
case'(':
case'{':
case'[':
pushStack(S, *p);
p++;
break;
case')':
case'}':
case']':
if (stackEmpty(S)) {
cout << "缺少左括号!" << endl;
return 0;
}
else {
stackTop(S, e);//栈顶元素
if (isSame(e, *p))
popStack(S, x);
else {
cout << "括号不匹配";
return 0;
}
}
default:
p++;
}
}
这一段都没运行?!