2015-09-30 5 views
1

Я пытаюсь реализовать простой метод «перемешивания строк», который рекурсивно смешивает две строки одинакового размера (например, cat и dog становятся 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 [индекс, индекс]' исправляет это? Это определенно не должно происходить, и 'index, index' просто дважды оценивает« индекс »и использует вторую оценку. – 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 huh, хороший момент. Не думал об этом, это были годы с тех пор, как я работал со строкой/символом. Благодарю. –