#include <iostream>
using namespace std;
//此程序中可以用strsub,也可以用库函数strstr实现在字符串中匹配子串
//strsub是我们自己实现的在字符串中查找子串;
/*const char* strsub(const char *src,const char *sub)
{
const char *bp;
const char *sp;
if(src==NULL || sub==NULL)
{
return NULL;
}
while(*src)
{
bp=src;
sp=sub;
while(*bp++==*sp++)
if(!*sp)
return src;
src+=1;
}
return NULL;
}
*/
char *commonString(char *str1,char* str2)
{
if(str1==NULL || str2==NULL)
return NULL;
char *shortstr;
char *longstr;
char *substr;
if(strlen(str1)<=strlen(str2))
{
longstr=str2;
shortstr=str1;
}
else
{
longstr=str1;
shortstr=str2;
}
//如果在长的字符串中能找到短的字符串,返回短字符串
if(strstr(longstr,shortstr)!=NULL)
return shortstr;
substr=(char*)malloc(sizeof(char)*(sizeof(shortstr)));//申请堆内存存放 返回结果
for(int i=strlen(shortstr)-1;i>0;i--)
{
for(int j=0;j<=strlen(shortstr)-i;j++)
{
memcpy(substr,&shortstr[j],i);//将短字符串的一部分复制到substr中
substr[i]='\0'; //其长度逐渐减小
if(strstr(longstr,substr)!=NULL)//如果在longstr中找到substr,则返回substr
return substr;
}
}
return NULL;
}
int main()
{
char *str1=(char*)malloc(256);
char *str2=(char*)malloc(256);//分配堆内存存放字符串str1和str2
char *common=NULL;
cout<<"please input two strings (press enter key to end!): "<<endl;
gets(str1);
gets(str2);
common=commonString(str2,str1);//取最大的相同子串
cout<<"the longest common string is: "<<common<<endl;
return 0;
}