Расстояние Хэмминга: неверный счет - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь создать функцию для вычисления расстояния Хэмминга между двумя строками.Когда я вызываю эту функцию, она должна сообщать мне количество символов, которые не совпадают между двумя строками.

Мой вывод неверен.Я продолжаю получать результаты случайных чисел.Ниже мой код:

using namespace std;

// function to calculate Hamming distance
int HammingDistance(char seq1[], char seq2[])
{
    int i = 0, count = 0;
    while (seq1[i] != ' ')
    {
        if (seq1[i] != seq2[i])
            count++;
        i++;
    }
    return count;
}


int main()
{
    char seq1[] = "doga";
    char seq2[] = "dogb";

    cout << HammingDistance(seq1, seq2) << endl;        

    return 0;
}

Я продолжаю получать результаты случайных чисел в моем выводе, например, 99 или 207.

Когда в этом примере я должен получить 1.

Любая помощь, где я иду не так, с благодарностью!Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Условие seq1[i] != ' ' не является хорошим способом проверки, достигли ли вы конца строки.Предполагая, что ваши строки завершены нулем, вы можете использовать seq1[i] != '\0'.

Причина, по которой вы видите "случайные" результаты, заключается в том, что цикл не встречает пробел внутри строки и продолжает читать послеконец строк в другие части памяти программы.Цикл останавливается только тогда, когда встречается байт памяти, который содержит те же биты, что и представление ' '.

. Вам также следует подумать о том, как обрабатывать случаи, когда две строки имеют разную длину.

0 голосов
/ 08 июня 2018

Вы должны проверить конец строки с \0, а не с (пробел).

Тогда ваше время должно быть: while (seq1[i] != '\0')

...