Short =abcde
Long =123456
Abcde
Abcde
Abcd
Bcde
Abc
Bcd
Cde
Ab
Bc
Cd
De
A
B
C
D
E
char * common_sub( char * str1, char *str2)
{
assert((str2 != NULL) && (str1 != NULL));
char * shortstr = NULL;
char * longstr = NULL;
if(strlen(str1) > strlen(str2))
{
longstr = str1;
shortstr = str2;
}
else
{
longstr = str2;
shortstr =str1 ;
}
/*if (strstr(longstr, shortstr) != NULL)
{
return shortstr;
}
*/
char * subStr = new char[strlen(shortstr)+1];
memset(subStr,0,strlen(shortstr)+1);
for (size_t i = strlen(shortstr); i >0 ; i--)
{
for (size_t j = 0; j <= strlen(shortstr)- i ; j++)
{
memcpy(subStr,&shortstr[j],i);
subStr[i] = '\0';
if(strstr(longstr,subStr) != NULL)
return subStr; //注意内存没有进行释放
}
}
return NULL;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *pSub = NULL;
pSub= common_sub("abcdef","de");
if(pSub)
{
cout<<pSub<<endl;
delete pSub;
pSub = NULL;
}
else
cout<<"no sub"<<endl;
return 0;
}