问答详情
源自:4-4 栈应用括号匹配二

和老师一样的代码,为啥是不匹配呢

#include<iostream>

#include"MyStack.h"

using namespace std;

int main()

{

MyStack<char> *pStack=new MyStack<char>(30);

MyStack<char> *pNeedStack=new MyStack<char>(30);

char str[]="[()]";

char currentNeed=0;

for(int i=0;i<strlen(str);i++)

{

if(str[i]!=currentNeed)

{

pStack->push(str[i]);

switch(str[i])

{

case'[':

if(currentNeed!=0)

{

pStack->push(currentNeed);

}

currentNeed=']';

break;

case'(':

if(currentNeed!=0)

{

pStack->push(currentNeed);

}

currentNeed=')';

break;

default:

cout<<"不匹配"<<endl;

system("pause");

return 0;

}

}

else

{

char elem;

pStack->pop(elem);

if(!pNeedStack->pop(currentNeed))

{

currentNeed=0;

}

}

}

if(pStack->stackEmpty())

{

cout<<"匹配"<<endl;

}

else

cout<<"不匹配"<<endl;

delete pStack;

pStack=NULL;

delete pNeedStack;

pNeedStack=NULL;

system("pause");

return 0;

}

求大神指点

提问者:格调_moment1 2018-09-27 17:45

个回答

  • T松子
    2018-11-19 21:30:56

    兄弟,找着你的错误了,在for循环里,每次拿取的str[i]和currentNeed相比较,如果不相等,就需要把str[i]压入栈pStack中,到这一步你还是正确的。但是接下来当currentNeed!=0时,需要把currentNeed压入栈pNeedStack中时,你却压入到了pStack栈中了。

    https://img3.mukewang.com/5bf2baa300014c5202540417.jpg

    只需要把pStack->push修改为pNeedStack->push即可。

  • qq_蔚蓝色的天空_3
    2018-10-03 21:56:53

    先定位代码出错的地方  在翻开老师的视频  一点一点仔细的看