第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

從第三次循環(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;

}




正在回答

5 回答

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

1 回復(fù) 有任何疑惑可以回復(fù)我~

第三次循環(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,只是個人一點意見哈,有其他想法也愿聞其詳!

0 回復(fù) 有任何疑惑可以回復(fù)我~

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

0 回復(fù) 有任何疑惑可以回復(fù)我~

第三次循環(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????? 是不是這個意思

1 回復(fù) 有任何疑惑可以回復(fù)我~

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

2 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

從第三次循環(huán)開始想不明白但是運行結(jié)果是正確的

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號