1. 程式人生 > >求一個串中出現的第一個最長重複子串

求一個串中出現的第一個最長重複子串

/*exp4-5.cpp*/
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define MaxSize 100
typedef struct
{
 char ch[MaxSize];
 int len;/*串長*/
}SqString;
extern void StrAssign(SqString &str,char cstr[]);/*在algo4-1.cpp檔案中*/
extern void DispStr(SqString s);
SqString *MaxSubstr(SqString s)
{
 SqString *sp;
 int index=0,length=0,length1,i=0,j,k;
 while(i<s.len)
 {
  j=i+1;
  while(j<s.len)
  {
   if(s.ch[i]==s.ch[j])/*找一子串,其序號為i,長度為length*/
   {
    length1=1;
    for(k=1;s.ch[i+k]=s.ch[j+k];k++)
     length1++;
    if(length1>length)/*將較大長度者賦給index與length*/
    {
     index=i;
     length=length1;
    }
    j+=length1;
   }
   else
    j++;
  }
  i++;/*繼續掃描第i個字元之後的字元*/
 }
 sp=(SqString *)malloc(sizeof(SqString));
 sp->len=length;
 for(i=0;i<length;i++)
  sp->ch[i]=s.ch[index+i];
 return sp;
}
void main()
{
 char str[MaxSize];
 SqString s,*sp;
 printf("輸入串:");
 gets(str);
 StrAssign(s,str);/*建立串s*/
 sp=MaxSubstr(s);
 printf("求最長重複子中:\n");
 printf("原串:"); 
 DispStr(s);
 printf("最長重複子串:");
 DispStr(*sp);
}