C/C++编程题之找出2个给定字符串中最长的公共子字符串

/******************************************************************************************************
Description     找出2个给定字符串中最长的公共子字符串
Prototype       void vProcTaskToCoreByLayerAndTime(unsigned int Layer,unsigned int* pDuration)
Input Param     char* pSrcStr1, char* pSrcStr2: 给定的2个字符串
Output Param    char* pSubStr : 从给定的字符串中找到的最长公共子串
Return Value    
********************************************************************************************************/
#include <stdio.h>
#include <string.h>

char Small2Big(char ch)
{
	if(ch >= 'a' && ch <= 'z')
		return (ch-32);
	return ch;
}

void vGetTheLongestSubStringInTwoStrings(char* pSrcStr1, char* pSrcStr2, char* pSubStr)
{
	if(pSrcStr1 == NULL || pSrcStr2 == NULL || pSubStr == NULL)
		return;
	char word[1024];
	char tmpword[1024];
	memset(word,0x00,sizeof(word));
	memset(tmpword,0x00,sizeof(tmpword));

	int num = 0,tmp = 0,tmpStr1 = 0,flag = 0;
	unsigned int len1 = (unsigned int)strlen(pSrcStr1);
	unsigned int len2 = (unsigned int)strlen(pSrcStr2);
	for(unsigned int m = 0; m < len1; m++)
	{
		tmpStr1 = m;
		tmp = 0;
		flag = 0;
		memset(tmpword,0x00,sizeof(tmpword));
		for(unsigned int i = 0; i < len2; )
		{

			char trans1 = Small2Big(pSrcStr1[m]);
			char trans2 = Small2Big(pSrcStr2[i]);
			if(trans1 == trans2)
			{
				flag = 1;
				tmpword[tmp++] = pSrcStr1[m];	
				m++;
				i++;
				continue;
			}
			tmpword[tmp] = '\0';
			if( flag == 1 && tmp >= num)
			{
				strcpy_s(word,tmp+1,tmpword);
				memset(tmpword,0x00,sizeof(tmpword));
				num = tmp;
				tmp = 0;
				flag = 0;
			}
			else
			{
				memset(tmpword,0x00,sizeof(tmpword));
				tmp = 0;
				flag = 0;
				m = tmpStr1;
			}
			i++;
		}
		tmpword[tmp] = '\0';
		if( flag == 1 && tmp >= num)
		{
			strcpy_s(word,tmp+1,tmpword);
			memset(tmpword,0x00,sizeof(tmpword));
			num = tmp;
			tmp = 0;
			flag = 0;
		}

		m = tmpStr1;
	}
	strcpy_s(pSubStr,num+1,word);
}



                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值