递归实现求取两个字符串的最大公约数
2018-02-02 11:36
507 查看
用C语言编写一个函数,返回两个字符串的最大公串。例如,“adbccadebbca”和“edabccadece”,返回“bccade”!!
#include <iostream>
#include <string>
#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
//#include <windows.h>
using namespace std;
char findMaxStr(char * s1,char *s2){
char *ss;
static int maxlen=0;
int len;
if(strstr(s1,s2)) //如果S2是S1的子串
{
if(maxlen<strlen(s2))
{
maxlen=strlen(s2);
printf("maxlen:%d result:%s\n",maxlen,s2);
}
return 0;
}
len=strlen(s2);
if(len==1)
{ //递归的出口函数,终止条件
//printf("error\n");
//return 1;
return 1;
}
ss=(char *)malloc(len);
memcpy(ss,s2,len);//内存拷贝函数
ss[len-1]=0;
//printf("len=%d str=%s\n",len-1,ss);
findMaxStr(s1,ss); //是否需要注释掉??
memcpy(ss,s2+1,len); //后移一位
//printf("second: len=%d str=%s\n",len-1,ss);
findMaxStr(s1,ss); //递归
free(ss);
return 1;
}
int main()
{
char a[200]="adcyioabcdefxxabcdxxx";
char b[200]="mmx";
findMaxStr(a,b);
return 0;
}
#include <iostream>
#include <string>
#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
//#include <windows.h>
using namespace std;
char findMaxStr(char * s1,char *s2){
char *ss;
static int maxlen=0;
int len;
if(strstr(s1,s2)) //如果S2是S1的子串
{
if(maxlen<strlen(s2))
{
maxlen=strlen(s2);
printf("maxlen:%d result:%s\n",maxlen,s2);
}
return 0;
}
len=strlen(s2);
if(len==1)
{ //递归的出口函数,终止条件
//printf("error\n");
//return 1;
return 1;
}
ss=(char *)malloc(len);
memcpy(ss,s2,len);//内存拷贝函数
ss[len-1]=0;
//printf("len=%d str=%s\n",len-1,ss);
findMaxStr(s1,ss); //是否需要注释掉??
memcpy(ss,s2+1,len); //后移一位
//printf("second: len=%d str=%s\n",len-1,ss);
findMaxStr(s1,ss); //递归
free(ss);
return 1;
}
int main()
{
char a[200]="adcyioabcdefxxabcdxxx";
char b[200]="mmx";
findMaxStr(a,b);
return 0;
}
相关文章推荐
- 欧几里得求两个整数最大公约数算法的汇编递归实现代码
- 求两个数字的最大公约数-Python实现,三种方法效率比较,包含质数打印质数的方法
- 递归实现最大公约数最小公倍数
- java实现计算两个整数的最大公约数代码及附图
- 用递归实现查找字符串中相同字符连续出现次数的最大值
- 找出两个字符串中最大的公共子串的简单实现
- 高精度计算:最大公约数【两个数字字符串】
- 编程求取两个整数的最大公约数.欧几里德算法
- 最大公约数(递归与非递归实现),最小公倍数
- 编程实现查找两个字符串的最大公共子串 示例:"aocdfe"和"pmcdfa"最大公共子串为"cfd"
- c++实现用欧几里得算法求两个整数的最大公约数
- Java语言实现查找两个字符串的最大公共字串
- iOS 算法面试题(打印2-100之间的素数、求两个整数的最大公约数、查找字符串的位置)~demo
- 获取两个字符串中最大相同子串的实现
- 用递归实现查找字符串中相同字符连续出现次数的最大值
- 求两个整数的最小公倍数和最大公约数的算法及其C++实现
- 黑马程序员——求两个字符串最大公约数的解法
- C++实现求两个字符串的最大公共子串
- C语言实现寻找两个字符串中的最大公共字符串长度
- C语言实现 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。