使用后缀数组的概念。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int max = 200;
int scmp(const void *p, const void *q);
int comlen(const char *p, const char *q);
int main(void)
{
char c[max];
char *a[max];
int i,j,len,maxlen,maxi;
printf( "Please input the string:\n ");
if(fgets(c,max,stdin) == NULL)
{
printf( "error!\n ");
exit(-1);
}
len = strlen(c) - 1;
if(c[len] == '\n ')
c[len] = '\0 ';
for(i = 0; i < len; i++)
a[i] = &c[i]; //提取后缀
qsort(a, len - 1,sizeof(char *),scmp); //对后缀进行排序
maxlen = 0;
maxi = 0;
for(i = 0; i < len - 1; i++)
if((j= comlen(a[i],a[i+1])) > maxlen)
{
maxlen = j;
maxi = i;
}
printf( "The max substring of this string is:\n ");
printf( "%.*s\n ",maxlen,a[maxi]);
return 0;
}
int scmp(const void *p, const void *q)
{
char *v1, *v2;
v1 = *(char **)p;
v2 = *(char **)q;
return strcmp(v1,v2);
}
int comlen(const char *p, const char *q)
{
int i = 0;
while((*p != '\0 ') && (*p++ == *q++))
i++;
return i;
}