2015-09-30 125 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呵,好点。还没有想过,自从我使用字符串/字符差异已经过去了几年。谢谢。 –

相关问题