//10、 找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。(C语言)
#include<stdio.h>
#include<string.h>
int main()
{
//定义变量i,j,k分别用于for循环,count为相同字符个数,max相同字符最多的一组,max取最大时,last记录最后一个字符的位置。
int i = 0,j = 0,k = 0,count = 1,max = 0,last = 0;
//定义两个数组,分别放置两个字符串
char a[50],b[50];
printf("请输入第一个字符串:\n");
scanf("%s",a);
printf("请输入第二个字符串:\n");
scanf("%s",b);
//用for循环遍历两个数组,对其中的元素进行比较,如果啊a[i]=b[j]出现相同,再比较下一对字符的a[i+1]=b[j+1],如果相同则count++,因为count
//本来取一所以现在计数的长度,正好为子字符串的公共长度。因为一个字符串可能出现多个相同的字符串,我们要找到最大的字符串所以,要求其最
//并对count的最大值做记录,再记录下此时i的值,然后输出最大公共字符串。
for(i=0;i<=(strlen(a));i++)
{
for(j=0;j<=(strlen(b));j++)
{
if(a[i]==a[j])
{
if(a[i+1]==a[j+1])
{
count++;
if(count>max)
{
last=i;
max=count;
}
i++;
j++;
}
}
}
}
//输出最大子字串
printf("最大的子字串为");
for(k=last-max+1;k<last;k++)
{
printf("%c",a[k]);
}
printf("\n");
} |
|