求最长公共子串函数C语言
时间: 2024-02-07 11:03:55 浏览: 30
引用提供了一个求两个字符串最长公共子串的C语言函数,函数名为comstrmax,它的参数是两个字符串类型的指针s和t。函数的实现过程是先从s的第一个字符开始,如果有匹配的子串,就记录下这个子串的长度,然后从第二个字符开始,记录比较这些长度,得到最大长度和开始的位置。接着,循环比较t中的每个字符,如果有匹配的字符,就记录下匹配的长度,然后继续往后匹配,直到不匹配为止。如果这一次匹配的长度比之前记录的最大长度还要大,就更新最大长度和开始匹配的位置。最后,输出最长公共子串。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
typedef struct {
char ch[100];
int len;
} stringtype;
void comstrmax(stringtype *s, stringtype *t) {
int position = 0, maxlen = 0, i = 0, j, k, length;
while (i < s->len) {
j = 0;
while (j < t->len) {
if (s->ch[i] == t->ch[j]) {
length = 1;
for (k = 1; s->ch[i + k] == t->ch[j + k]; k++) {
length++;
}
if (length > maxlen) {
position = i;
maxlen = length;
}
j += length;
} else {
j++;
}
}
i++;
}
printf("\n字符串'%s'和'%s'的最大公共子串:", s->ch, t->ch);
for (i = 0; i < maxlen; i++) {
printf("%c", s->ch[position + i]);
}
}
int main() {
stringtype s = {"abcdefg", 7};
stringtype t = {"defghij", 7};
comstrmax(&s, &t);
return 0;
}
```