2015-09-30 69 views
1

我試圖實現一個簡單的「字符串混合」方法,遞歸混合兩個相同大小的字符串(例如,貓和狗變成cdaotg - 字符串1的第一個字母,字符串2的第一個字母,等等)。爲什麼我的「字符串混合」方法返回意外的結果?

我的方法如下:

string mingleStrings(string s1, string s2, int index) { 
    if (index >= s1.length()) { 
     return ""; 
    } else { 
     string mingled = ""; 
     mingled += s1[index] + s2[index]; 
     mingled += mingleStrings(s1,s2,++index); 
     return mingled; 
    } 
} 

當我使用標操作符上我的字符串(S1 [指數]),則返回整個字符串到該索引。爲了在某​​個索引處獲得字符串的特定字符,我需要輸入s1 [index,index]。這對我來說是新的。

+1

你能提供一種[MCVE](http://stackoverflow.com/help/mcve)其中'S1 [指數]'還給整個子和其中'S1 [指數,指數]'修復?它絕對不應該發生,'索引,索引'只是評估'索引'兩次,並使用第二次評估。 – chris

+0

難道它不是? –

回答

4

與您的代碼的問題是在這條線:

mingled += s1[index] + s2[index]; 

這裏做的事情在index是增加碼字符,然後追加除了你的字符串作爲單個字符的結果。

它應該是兩個獨立的操作:

mingled += s1[index]; 
mingled += s2[index]; 

這樣你每次調用+=一次一個字符添加到字符串,產生您所期望的結果。

Demo.

+0

請詳細說明一下嗎?有人會認爲兩個字符串之間的'+'運算符(在'+ ='右邊)將先連接它們,然後連接到左邊的字符串。 –

+4

@AlejandroIván,索引字符串的結果是一個字符,而不是字符串。不幸的是,添加'char'會默默地添加數字,而不是在沒有投射的情況下出現錯誤(C++與C在這裏完全一樣)。 – chris

+0

@chris呵,好點。還沒有想過,自從我使用字符串/字符差異已經過去了幾年。謝謝。 –

相關問題