Member 11112168 Ответов: 1

Как сравнить две строки в C?


Привет, я хочу сравнить две строки и выяснить, насколько эти две строки похожи.
strcmp-это не очень хорошая идея, я думаю.
например, у нас есть 3 строки. Мне нужно выяснить, что сходство строк 1 и 2 выше или сходство строк 1 и 3. Есть Идеи?

Я хочу это для сравнения полезной нагрузки двух пакетов.

спасибо

Есть ли у нас такая функция сравнения в c?

Что я уже пробовал:

string str1 = " я-строка номер один"
string str2 = " я-строка номер два"
string str3 = " это строка номер 3"
инт similarity12,similarity13;
similarity12 = сравнить(str1, str2);
similarity13 = сравнить(str1 выглядит следующим образом,стр3);

1 Ответов

Рейтинг:
2

PIEBALDconsult

Это звучит так, как будто вы могли бы захотеть Расстояние Левенштейна - Википедия[^]


Member 11112168

Можем ли мы использовать Левенштейна для оценки сходства полезной нагрузки пакетов?

PIEBALDconsult

Это всего лишь байты. :)
Попробуй и увидишь.

Member 11112168

В коде, когда я хочу напечатать результат, я получаю "незаконная запись, ошибка за пределами границ"

#define MIN3(a, b, c) ((a) < (b) ? ((a) < (c) ? (a) : (c)) : ((b) < (c) ? (b) : (c)))
static void levenshtein(char *s1, char *s2) {
      int x, y, s1len, s2len,similarity;
    s1len = strlen(s1);
    s2len = strlen(s2);
	printf("string1= %s \nstring2= %s \n",s1,s2);
      int matrix[s2len+1][s1len+1];
    matrix[0][0] = 0;

    for (x = 1; x <= s2len; x++)
        matrix[x][0] = matrix[x-1][0] + 1;
  for (y = 1; y <= s1len; y++)
        matrix[0][y] = matrix[0][y-1] + 1;
      for (x = 1; x <= s2len; x++)
        for (y = 1; y <= s1len; y++)
            matrix[x][y] = MIN3(matrix[x-1][y] + 1, matrix[x][y-1] + 1, matrix[x-1][y-1] + (s1[y-1] == s2[x-1] ? 0 : 1));
        similarity = matrix[s2len][s1len];
       printf("payload similarity= %d \n", similarity) ;  
}

PIEBALDconsult

Кажется, это работает на меня.
Вы использовали отладчик, чтобы пройти через код, чтобы быть уверенным, что знаете, где проблема (если таковая имеется)?
А какой компилятор вы используете?

Member 11112168

Я использую этот код в Contiki Cooja. Для Левенстьена я использовал другой алгоритм.спасибо