您的位置:首页 > 编程语言 > C语言/C++

c语言:查找两个字符串的最大公共子串

2017-11-24 20:15 459 查看
题目:编程实现查找两个字符串的最大公共子串

示例:”aocdfe”和”pmcdfa”最大公共子串为”cdf”

思路

输入两个字符串,由短字符串的长度决定比较次数。

每次比较一个字符,从短字符串的第一个依次与长字符串的每一个字符比较,若出现相同的字符,则两个字符串各自取下一位进行比较,直到出现不相同字符的为止。(同时要注意比较是不能超出短字符串的长度,不然会出现未知后果)

定义两个数组a,b;a用来获取相同字符,若a的长度大于b的长度,则将a复制给b。

代码如下:

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

void substr(char *s1, char *s2, int len)
{
int i, j, m = 0;
int p, q;
int length = strlen(s2);
char a[100] = {0};
char b[100] = {0};
for(i = 0; i < len; i++)
{
for(j = 0; j < length; j++)
{
strcpy(a, "0");
p = i;
q = j;

while(s1[p] == s2[q] && s1[p] != 0)
{
a[m] = s2[q];
p++;
q++;
m++;
}

if(strlen(a) > strlen(b))
{
strcpy(b, a);
}
m = 0;
}
}
printf("最大公子串:%s\n", b);
}

int main()
{
char str1[100] = {0};
char str2[100] = {0};
int len;

printf("请输入字符串1:");
scanf("%s", str1);
printf("请输入字符串2:");
scanf("%s", str2);

len = strlen(str1) <= strlen(str2) ? strlen(str1) : strlen(str2);
if(len == strlen(str1))
{
substr(str1, str2, len);
}
else if(len == strlen(str2))
{
substr(str2, str1, len);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: