关于C语言的一道题:有两个字符串,str1 = "abcdefgggg",str2="aaagggg",要求找出其共同的最长子串!注意:是最长的共同子串!函数接口:char *submaxstring(const char *str1,const char *str2)

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 19:24:52
关于C语言的一道题:有两个字符串,str1="abcdefgggg",str2="aaagggg",要求找出其共同的最长子串!注意:是最长的共同子串!函数接口:char*submaxstring(co

关于C语言的一道题:有两个字符串,str1 = "abcdefgggg",str2="aaagggg",要求找出其共同的最长子串!注意:是最长的共同子串!函数接口:char *submaxstring(const char *str1,const char *str2)
关于C语言的一道题:
有两个字符串,str1 = "abcdefgggg",str2="aaagggg",要求找出其共同的最长子串!
注意:是最长的共同子串!
函数接口:char *submaxstring(const char *str1,const char *str2)

关于C语言的一道题:有两个字符串,str1 = "abcdefgggg",str2="aaagggg",要求找出其共同的最长子串!注意:是最长的共同子串!函数接口:char *submaxstring(const char *str1,const char *str2)
两个for循环,再创建一个动态数组,就可以了:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
char *submaxstring(const char *str1,const char *str2)
{
int size=(strlen(str1)>strlen(str2)?strlen(str1):strlen(str2));
char *max=(char *)malloc(sizeof(char)*size);
int i,j,k,m=1,length=1;
for(i=0;str1[i]!='\0';++i)
{
k=0;
for(j=0;str2[j]!='\0';++j)
{
while(str1[i+k]==str2[j+k])
{
k++;
m++;
}
if(m>length)
{
length=m;
strncpy(max,str1+i,k);
max[k]='\0';
}
k=0;
m=1;
}
}
return max;
}
void main()
{
char *str1="abcdefgggg",*str2="aaagggg";
char *max;
puts(str1);
puts(str2);
max=submaxstring(str1,str2);
printf("最长的共同子串:\n");
puts(max);
}