求一個串中出現的第一個最長重複子串
阿新 • • 發佈:2019-02-02
/*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);
}
#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);
}