2014-09-27 42 views
-1

我想解決這個遞歸。我很難返回字符串:如何使用遞歸來返回一個字符串?

string reverse(string); 

int main() { 
    cout << reverse("1234") << endl; 

} // end main 

string reverse(string integer) { 
    if (integer == "") 
     return ""; 
    else 
     return reverse(integer.substr(1, integer.length())); 
} // end reverse 

我知道函數有一個小問題(我希望)。你能幫我嗎修復它?謝謝,

+1

_「能否請你幫我弄明白了嗎?「_那麼你所有的[_小問題'_](http://ideone.com/ZzhiuT)似乎都是,你終於回來了。 – 2014-09-27 01:13:27

+0

編輯這個問題只爲你, – Grendizer 2014-09-27 01:17:24

+0

@πάνταῥεῖ那部分是好的,其他返回語句需要修復 – 2014-09-27 01:18:19

回答

1

試試這個

string reverse(string integer) { 
    if (integer.length() == 0) 
     return ""; 
    else 
     return reverse(integer.substr(1, integer.length())) + integer.substr(0,1); 
} // end reverse 

live demo

+0

做得很好Mr. Flow!謝謝! – Grendizer 2014-09-27 01:21:55

+0

順便說一句,你爲什麼拒絕這個問題呢?請告訴我,這樣我就不會再犯同樣的錯誤了。 – Grendizer 2014-09-27 01:22:49

+0

@ user3700785 _「順便說一句,你爲什麼要投票回答這個問題?」_因爲我必須解決一些問題(比如'void main()'等)),以便獲取已發佈的代碼。 (現在BTW我的DV) – 2014-09-27 01:25:56

0

你的問題是,你保持對較短的字符串遞歸,直到你到達空字符串。
既然你從來沒有什麼與遞歸調用的結果,你最後也是空字符串。

如果你想讓字符串的第一個字符在結果中出現,你需要使用它,你不能把它扔掉。

你應該把第一個字符是扭轉字符串的休息,這樣的結果的後面:

string reverse(string s) 
{ 
    if (s == "") 
     return ""; 
    else 
     return reverse(s.substr(1, s.length())) + s[0]; 
} 

,或者更短的

string reverse(string s) 
{ 
    return s.empty() ? "" : reverse(s.substr(1)) + s[0]; 
} 
相關問題