括號匹配有問題
#include<stdlib.h>
#include"MyStack.h"
int main()
{
//括號存放棧
MyStack<char> *p = new MyStack<char>(30);
//括號急需匹配棧
MyStack<char> *pNeed = new MyStack<char>(30);
char str[] = "[()]";
char need = 0;
for (int i = 0; i < strlen(str);i++){
if (str[i] != need){
cout << "第" << i+1 << "次入第一個棧:";
p->push(str[i]);
cout << str[i] << endl; ??
switch (str[i]){
case'[':
if (need != 0){
cout << "第" << i + 1 << "次入另一個棧:";
pNeed->push(need);
cout << need<<endl;
}
need = ']';
break;
case'(':
if (need != 0){
cout << "第" << i + 1 << "次入另一個棧:";
pNeed->push(need);
cout << need << endl;;
}
need = ')';
break;
default:
cout << "字符串不匹配" << endl;
system("pause");
return 0;
}
}
else{
char elem=0;
p->pop(elem);
cout << "elem:" << elem<<" ?";
if (!pNeed->pop(need)){
cout << "need:" << need << endl;
need = 0;
}
}
}
if (p->EmptyStack()){
cout << "字符串括號匹配" << endl;
}
else{
cout << "字符串括號不匹配" << endl;
}
delete p;
p = NULL;
delete pNeed;
p = NULL;
system("pause");
return 0;
}
從運行結(jié)果可以看出: ‘)’ 這個符號根本沒有進入第二個棧 ?,但結(jié)果判定正確的標準是第一個棧空。
2017-04-14
因為你是先入棧再賦值need。第一次循環(huán)的時候,need==0,所以直接need = ']',pNeed里有],第二次循環(huán)need==),然后滿足條件。
case'[':
if (need != 0){
cout << "第" << i + 1 << "次入另一個棧:";
pNeed->push(need);
cout << need<<endl;
}
need = ']';
break;