亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

從第三次循環開始想不明白但是運行結果是正確的

第一次循環'['入棧,currentNeed=']'

第二次循環'('入棧,']'入Need棧,currentNeed=')'

第三次循環()匹配,‘(’彈出,然后if(!pNeedStack->pop(currentNeed)){currentNeed=0;}是false不執行,那么這時currentNeed還是等于‘)’的嗎?

第四次循環‘]’就不與currentNeed相等了,然后執行if(str[i]!=currentNeed),當前‘]’就入棧了,既不符合case1,也不符合case2,然后就會執行default輸出字符不匹配

所以到這里我就開始不懂了,但是執行結果是正確的

代碼:

#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);//用來存放掃描字符串當中所找到的字符

MyStack<char> *pNeedStack=new MyStack<char> (30);//記錄棧頂急需的字符


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

char currentNeed=0;//表示當前需要的字符,賦初值用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;

}




正在回答

5 回答

即pNeedStack->popcurrentNeed為false
也就是出棧后need隊列為空了,則popcurrent初始化

1 回復 有任何疑惑可以回復我~

第三次循環()匹配?????? !pNeedStack->pop(currentNeed)?? 是一個真(true),那么然后執行currentNeed = 0;? 然后下一次循環,str[i] = ' ] ', 并將str[i] 入pStack棧,' ] '既不是case1,也不是case2,然后default結束,并沒有再去判斷pStack是否為空,因為程序已經結束。如果不執行default直接去去判斷pStack是否為空,也是可以的,因為pStack里面還有 一個 ' ] ' ,并不為空,照樣能輸出不匹配。我倒覺得不用寫default,只是個人一點意見哈,有其他想法也愿聞其詳!

0 回復 有任何疑惑可以回復我~

是這個意思,你看看pop的定義就能知道是你說的意思!

0 回復 有任何疑惑可以回復我~

第三次循環( )匹配,'(' 彈出,然后if(!pNeedStack->pop(currentNeed)){currentNeed=0;}是false不執行,那么這時currentNeed還是等于 ')' 的嗎??:? if(!pNeedStack->pop(currentNeed)){currentNeed=0;}這個的意思是如果真則currentNeed=0;如果false則pNeedStack->pop(currentNeed).也就是從pNeedStack這個棧中出棧,而出棧的值也被賦值給currentNeed????? 是不是這個意思

1 回復 有任何疑惑可以回復我~

如果if(!pNeedStack->pop(currentNeed)){currentNeed=0;} ?括號里面的條件是false,就相當于!pNeedStack->pop(currentNeed) 這句話是錯的,注意前面的“!”,這句話要是錯的,那么pNeedStack->pop(currentNeed) 就為真, 這句話本身也是一個出棧的操作,所以說,如果是真的話,會有東西出棧的,存到了currentNeed中。

2 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

從第三次循環開始想不明白但是運行結果是正確的

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號