获取两个字符串中最大的公共子串

#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;
}


猜你喜欢

转载自blog.csdn.net/qq_35965090/article/details/77128024