我有要求我做下面的任務分配: 「有一個用戶輸入一個字符串,然後如下顯示這個字符串搗毀了:在字符串中顯示的第一個字符,那麼最後,那麼第二個,則倒數第二,然後第三個......所以,如果字符串爲「ABCDEF」,它會顯示: afbecd(輸入「ABCDEF」)」 這裏是我的方法,但它並沒有跑。我有段錯誤11字符串醪(遞歸)C++
#include <iostream>
#include <cmath>
using namespace std;
void printLetters(string s);
int main()
{
string sequence;
cout << "Enter a sequence: ";
getline(cin, sequence);
printLetters(sequence);
}
void printLetters(string s)
{
int a = floor(s.length()/2.0);
// stopping case
if(s == "")
{
return;
}
// reduce problem
printLetters(s.substr(0));
//cout << s[0];
cout << s[a];
}
這裏是一個〔實施例:12345。在我的功能printLetters(字符串s),我打印出字符串從索引0開始,然後我有充分的字符串12345之後,我「cout」索引s.length()/ 2處的內容,它是中間字符「3」。然後回到串並保持打印出的子索引0開始再次但是這一次,它是1245我不斷重複這些步驟,直到我得到1.在講座中,當遞歸到達的結束我的教授解釋過程中,它會從底部返回到頂部。然後當我達到1時,它會回到5,2,3,4。所以我假設我會打印出字符串「15234」,但我沒有。如果您有任何想法,我會很樂意傾聽。非常感謝!
這裏是其用於反轉的字符串另一代碼。我的教授在課堂上解釋說,這是他在代碼背後給出的邏輯。所有的
#include <iostream>
using namespace std;
void printString(string s);
int main()
{
printString("hello");
return 0;
}
void printString(string s)
{
if(s == "")
{
return;
}
printString(s.substr(1));
cout << s[0];
}
'地板(s.length()/ 2.0)'更好寫作's.length()/ 2'。 – melpomene
你是什麼意思,「*這一次,它是1245 *」。 's.substr(0)'又是's',即'12345'。 – melpomene
嘗試先使用調試器... – Jepessen