两个字符串之间的最长关系

时间:2016-07-02 05:32:35

标签: c string

我试图在不使用任何高级函数或指针的情况下找到两个字符串之间的最大重叠,但我只能使用此代码在字符串的开头找到重叠。

#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的输出。但是,如果我在开头输入相似性“This is ax”和“This isas”给我正确的输出7。

1 个答案:

答案 0 :(得分:2)

您需要两个for / while循环来计算最大重叠次数。

  1. 在第一个循环中,您将逐步浏览第一个字符串的元素。

  2. 在第二个循环中,您将逐步执行第二个字符串的元素。

  3. 跟踪变量中的总体最大重叠。 比较第一个字符串的一部分和第二个字符串的一部分之间的最大重叠作为两个循环的内部函数。

  4. 类似的东西:

    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;
          }
       }
    }