两个字符串的最长公共子串

#include "stdio.h"     
#include "malloc.h"     
#include "string.h"     
char *maxsubstr(char *str1, char *str2)    
{
   char *p1, *p2, *q1, *q2, *destp;    
   char *substr;    
   int max = 0, len;    
   p1 = str1;    
   while(*p1 != '\0')    
   {    
	   q1 = str2;    
	   while(*q1 != '\0')    
       {    
		   len = 0;
	       p2 = p1;    
	       q2 = q1;    
          while((*p2 != '\0')&&(*q2 != '\0'))    
          {    
             if(*p2 == *q2)  
			 {
				 p2 ++;
			     q2 ++;
			     len ++;    
              }    
			 else    
              {
				  break;    
	           }    
	       }    
          if(len > max)    
	          {
				  max = len;    
	              destp =p1;    
	          }
		  q1++;
	   }
	   p1++;
   }
   substr=(char*)malloc(sizeof(char)*max);    
   strncpy(substr,destp,max);    
   substr[max] = '\0';  
   return substr;    
}   
	    
int main()    //测试例子
{   
	char *s1="aocdfeb";
	char *s2="pmcdfae";
	char *sub;    
	printf("%s\n%s\n",s1,s2);    
	sub = maxsubstr(s1,s2);    
	printf("the max sub string is:%s\n",sub);     
	return 0;    	
}    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值