У меня две строки s1: "abcd"
и s2: "ab"
и два вектора int v1: 12,13,14,15
и v2: 12,13
. Я вычисляю расстояние между двумя строками и двумя векторами. У меня есть код из Интернета для файла c
, чтобы рассчитать расстояние между двумя строками. Я модифицирую код, чтобы вычислить расстояние между двумя векторами, но в c++
. Код работает, но результат не тот же (расстояние должно быть одинаковым для обоих вычислений). Проблема возникает из:Почему я получаю два разных результата по строке и вектору
double transpositions = 0.0;
for (i = 0; i < s1_len; i++) {
if (!s1_matches[i]) continue;
while (!s2_matches[k]) k++;
if (s1[i] == s2[k]) transpositions++;
k++;
}
s1_len
является s1_len(s1)
(то же самое для s2) и s1_match
является int *s1_matches = (int*) calloc(s1_len, sizeof(int))
. Я запускаю код c
с правильными ответами, но когда я меняю код на c++
и меняю строковые переменные на векторные переменные, число, которое я получаю для transposition
, отличается. Чтобы изменить строку на вектор, я получаю размер вектора (v1_len
) по v1.size()
и v1_match
от int *v1_matches = (int*) calloc(v1_len, sizeof(int))
. код точно такой же:
double transpositions = 0.0;
for (i = 0; i < v1_len; i++) {
if (!v1_matches[i]) continue;
while (!v2_matches[k]) k++;
if (v1[i] == v2[k]) transpositions++;
k++;
}
Что здесь проблема?
В стороне, конечно, вы должны использовать целочисленный тип данных для «транспозиций» вместо типа данных с плавающей запятой. – paddy