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

#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。

最佳答案

需要两个循环来计算最大重叠。
在第一个循环中,您将逐步遍历第一个字符串的元素。
在第二个循环中,遍历第二个字符串的元素。
跟踪变量中的最大最大重叠。
将第一字符串的一部分与第二字符串的一部分之间的最大重叠作为两个循环的内部函数进行比较。
类似于:

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

10-04 20:19