数据结构课程设计,以顺序存储结构表示串,求两个字符串中的最长公共子串。帮忙看下,我运行不出来
- 提问者网友:城市野鹿
- 2021-11-07 12:15
- 五星知识达人网友:笑迎怀羞
- 2021-11-07 13:52
我改了下你的代码,你写的太冗余了,其实你第一个for循环的时候 记录下本次循环匹配的第一个项和最大匹配长度,如果本次的长度大于以前的长度,则更新,运行如下图:
代码如下:
#include
#include void search(SeqString T,SeqString P ) printf(" printf("第一个串为:%s,长度:%d printf("第二个串为:%s,长度:%d
#include
#define MaxStrSize 256
typedef struct {
char ch [MaxStrSize];
int length;
}SeqString;
{
int i,j,k,a;
int b=1;
int m =P.length;
int n = T.length;
int index = 0;//第一个匹配项
int maxlen = 0;//最大的匹配长度
int flag = 0;//未找到
for (i=0;i<=n;i++)
{
k=i;
for (j=0;j<=m;j++)
{
a = 0;
flag = 0;
while(j
k++;j++;a++;
flag = 1;
}
if(flag ==1)
{
if(a>maxlen)
{
maxlen = a;
index = j-a;//匹配的首项
}
}
}
}
printf("匹配最大长度为:%d,匹配结果为:",maxlen);
for(;maxlen>0;maxlen--)
{
printf("%c",P.ch[index++]);
}
");
void main ()
{
SeqString T1,P1;
printf("输入第一个字符串 :");
gets(T1.ch);
printf("输入第二个字符串 :");
gets (P1.ch);
T1.length=strlen (T1.ch);
P1.length=strlen (P1.ch);
",T1.ch,T1.length);
",P1.ch,P1.length);
}