如果輸入滿足以下條件,我必須撰寫一個bool mirrored()必須回傳的函式。true
如果字串包含由一個(且只有一個)哈希符號分隔的回文子字串,并且所有回文都正確,則該字串將被鏡像。
所以它應該回傳true以下內容:
#, ####, abc#cba,##a#aabc#cba
以及false以下內容:
abc, abc#cv, abc#cbaa#aa,ab#bac##c
這是我關于使用堆疊相關函式的第一個練習,我在使用以下代碼時遇到了困難:
bool isMirrored(){
vector<char> stack;
char s;
bool hashSymbol = false;
while(cin >> s){
if(s=='#'){
hashSymbol = true;
while(hashSymbol && !stack.empty()){
if(s==stack.back()){
stack.pop_back();
}
if(stack.empty()){
hashSymbol=false;
}
else{
return false;
}
}
}
stack.push_back(s);
}
return true;
}
我的計劃是當 a#不存在時,它用字符加載堆疊,當#找到 a 時,我的演算法進入“檢查模式”(因此將hashSymbol變數切換為true)并檢查堆疊的最頂部元素是否等于下一個特點。如果是,則檢查下一個元素并丟棄堆疊的最頂部元素。如果字符不匹配,則函式回傳false. 當堆疊為空時,演算法應再次進入“輸入模式”(hashSymbol切換為假)并重新開始回圈。如果函式沒有回傳 false 并且輸入結束,那么它必須回傳true。
我的問題是我不知道如何移動到輸入中的下一個字符。當它找到 a#時,它進入內部while陳述句 whiles仍然是#字符。
我想到了(至少乍一看)另一種可能更簡單的解決方案,但我仍然無法弄清楚當#找到 a 時如何移動到輸入中的下一個字符。
vector<char> stack;
char s;
while(cin >> s){
if(s!='#'){
stack.push_back(s);
}
else{
if(!stack.empty()){
[this is where I would check for equal characters]
}
else{
return true;
}
}
}
return stack.empty();
uj5u.com熱心網友回復:
第一個版本的一些提示。
這
while(hashSymbol && !stack.empty()){
是多余的。一次只檢查一個字符。
stack.push_back(s);
也將“#”推入堆疊。
我認為您將更容易適應您的第二個版本,而不是更正第一個版本。
你離解決方案不遠了..
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/429318.html
上一篇:g 編譯makefile有點麻煩
下一篇:是否可以通過麥克風播放音頻?
