#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
char *commonstring(char *str1, char *str2)
{
char *shortstr;
char *longstr;
char *substr;
int i,j;
if(NULL == str1||NULL == str2)
{
return NULL;
}
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)*strlen(shortstr)-1);
for(i=strlen(shortstr)-1;i>0 ;i--)
{
for(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 main(int argc, char *argv[])
{
char *str1 = (char*)malloc(256);
char *str2 = (char*)malloc(256);
scanf("%s" ,str1);
scanf("%s" ,str2);
cout<<"the common string is:"<<commonstring(str1, str2)<<endl;
}
编程思想:
1.先判断是否为字串,若是则直接return出子串
2.两个for循环,外部循环让子串长度由大到小,内部循环依次取出 i 个字符和长串比较 strlen(shortstr) - i 次,遍历整个子串.
注意:指针进行memcpy的时候需要先分配内存空间,字符串末尾要加'\0'