從第三次循環(huán)開始想不明白但是運行結(jié)果是正確的
第一次循環(huán)'['入棧,currentNeed=']'
第二次循環(huán)'('入棧,']'入Need棧,currentNeed=')'
第三次循環(huán)()匹配,‘(’彈出,然后if(!pNeedStack->pop(currentNeed)){currentNeed=0;}是false不執(zhí)行,那么這時currentNeed還是等于‘)’的嗎?
第四次循環(huán)‘]’就不與currentNeed相等了,然后執(zhí)行if(str[i]!=currentNeed),當(dāng)前‘]’就入棧了,既不符合case1,也不符合case2,然后就會執(zhí)行default輸出字符不匹配
所以到這里我就開始不懂了,但是執(zhí)行結(jié)果是正確的
代碼:
#include<iostream>
#include<stdlib.h>
#include<string>
#include"MyStack.h"
//#include"Coordinate.h"
using namespace std;
int main(void)
{
MyStack<char> *pStack=new MyStack<char> (30);//用來存放掃描字符串當(dāng)中所找到的字符
MyStack<char> *pNeedStack=new MyStack<char> (30);//記錄棧頂急需的字符
char str[]="[()]]";
char currentNeed=0;//表示當(dāng)前需要的字符,賦初值用ARIS碼
for(int i=0;i<strlen(str);i++)
{
if(str[i]!=currentNeed)
{
pStack->push(str[i]);
switch(str[i])
{
case'[':
if(currentNeed!=0)
{
pNeedStack->push(currentNeed);
}
currentNeed=']';
break;
case'(':
if(currentNeed!=0)
{
pNeedStack->push(currentNeed);
}
currentNeed=')';
break;
default://為了適用于后面有多出來的情況,例如:[()]]
cout<<"字符串不匹配"<<endl;
return 0;
}
}
else
{
char elem;
pStack->pop(elem);
if(!pNeedStack->pop(currentNeed))//判斷出棧是否正確,如果棧里沒有可pop出的字符就要賦值0
{
currentNeed=0;
}
}
}
if(pStack->stackEmpty())
{
cout<<"字符串括號匹配"<<endl;
}
else
{
cout<<"字符串括號不匹配"<<endl;
}
delete pStack;
pStack=NULL;
delete pNeedStack;
pNeedStack=NULL;
return 0;
}
2019-06-24
即pNeedStack->popcurrentNeed為false
也就是出棧后need隊列為空了,則popcurrent初始化
2016-12-25
第三次循環(huán)()匹配?????? !pNeedStack->pop(currentNeed)?? 是一個真(true),那么然后執(zhí)行currentNeed = 0;? 然后下一次循環(huán),str[i] = ' ] ', 并將str[i] 入pStack棧,' ] '既不是case1,也不是case2,然后default結(jié)束,并沒有再去判斷pStack是否為空,因為程序已經(jīng)結(jié)束。如果不執(zhí)行default直接去去判斷pStack是否為空,也是可以的,因為pStack里面還有 一個 ' ] ' ,并不為空,照樣能輸出不匹配。我倒覺得不用寫default,只是個人一點意見哈,有其他想法也愿聞其詳!
2016-10-13
是這個意思,你看看pop的定義就能知道是你說的意思!
2016-10-09
第三次循環(huán)( )匹配,'(' 彈出,然后if(!pNeedStack->pop(currentNeed)){currentNeed=0;}是false不執(zhí)行,那么這時currentNeed還是等于 ')' 的嗎??:? if(!pNeedStack->pop(currentNeed)){currentNeed=0;}這個的意思是如果真則currentNeed=0;如果false則pNeedStack->pop(currentNeed).也就是從pNeedStack這個棧中出棧,而出棧的值也被賦值給currentNeed????? 是不是這個意思
2016-06-25
如果if(!pNeedStack->pop(currentNeed)){currentNeed=0;} ?括號里面的條件是false,就相當(dāng)于!pNeedStack->pop(currentNeed) 這句話是錯的,注意前面的“!”,這句話要是錯的,那么pNeedStack->pop(currentNeed) 就為真, 這句話本身也是一個出棧的操作,所以說,如果是真的話,會有東西出棧的,存到了currentNeed中。