2016-07-02 3 views
0

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

#include <stdio.h> 
#include <string.h> 

int main (void) { 

    char string1[256], string2[256]; 
    int len = 0; 

    printf ("Enter string1"); 
    fgets (string1, sizeof (string1), stdin); 

    printf ("Enter string2"); 
    fgets (string2, sizeof (string2), stdin); 

    while (strncmp (string1, string2, len) == 0 && len < strlen (string1)) { 
     len = len + 1; 
    } 
    printf ("%d\n", len - 1); 
    printf (strcat (string1, string2)); 

    return 0; 
} 

Например: Если ввести «AXYZ» и «343axyz» он должен получить выход, равный 4. Тем не менее, если я введу сходство в начале «Это топор» и «Это ISAS» является давая мне правильный результат 7.

ответ

2

Для вычисления максимального перекрытия вам нужны два цикла for/while.

  1. В первом цикле вы проходите элементы первой строки.

  2. Во втором цикле вы проходите через элементы второй строки.

  3. Отслеживать общее максимальное перекрытие переменной. Сравните максимальное перекрытие между частью первой строки и частью второй строки в качестве внутренней функции двух циклов.

Что-то вроде:

int maxOverlap = 0; 
for (char* s1 = string1; *s1 != '\0'; ++s1) 
{ 
    for (char* s2 = string2; *s2 != '\0'; ++s2) 
    { 
     int overlap = 0; 
     while (s1[overlap] != '\0' && s1[overlap] == s2[overlap]) 
     { 
     ++overlap; 
     } 
     if (maxOverlap < overlap) 
     { 
     maxOverlap = overlap; 
     } 
    } 
} 
Смежные вопросы