永发信息网

数据结构课程设计,以顺序存储结构表示串,求两个字符串中的最长公共子串。帮忙看下,我运行不出来

答案:1  悬赏:0  手机版
解决时间 2021-11-07 15:27
  • 提问者网友:城市野鹿
  • 2021-11-07 12:15
数据结构课程设计,以顺序存储结构表示串,求两个字符串中的最长公共子串。帮忙看下,我运行不出来
最佳答案
  • 五星知识达人网友:笑迎怀羞
  • 2021-11-07 13:52
百度提交了好几次 怎么就提交不上呢 
我改了下你的代码,你写的太冗余了,其实你第一个for循环的时候 记录下本次循环匹配的第一个项和最大匹配长度,如果本次的长度大于以前的长度,则更新,运行如下图:

代码如下:
#include 

#include
#include 
#define MaxStrSize 256
typedef struct {
 char ch [MaxStrSize];
 int length;
}SeqString;
 
 

void search(SeqString T,SeqString P )
{
 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++]);
 } 

 printf("
");

}
void main ()

 
 SeqString T1,P1;
 printf("输入第一个字符串 :");
 gets(T1.ch); 
 printf("输入第二个字符串 :");
 gets (P1.ch);
 T1.length=strlen (T1.ch);
 P1.length=strlen (P1.ch);

 printf("第一个串为:%s,长度:%d
",T1.ch,T1.length);

 printf("第二个串为:%s,长度:%d
",P1.ch,P1.length);

 search(T1,P1); 
}

来自:求助得到的回答
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯