给定字符串A和B,输出A和B中的最大公共子串。

来源:互联网 发布:百度慧眼数据 编辑:程序博客网 时间:2024/06/05 10:02

输入字串一:aocdfe  字串二:pmcdfa
输出:cdf

直接贴加了注释后的代码:

#include<stdio.h>  #include<stdlib.h>  #include<string.h>  #include <iostream>using namespace std;char *commanstring(char shortstring[], char longstring[]){int i, j;char *substring=(char*)malloc(256);if(strstr(longstring, shortstring)!=NULL) //如果包含最短子串,那么返回shortstringreturn shortstring; for(i=strlen(shortstring)-1;i>0; i--) //否则,开始循环计算{for(j=0; j<=strlen(shortstring)-i; j++){memcpy(substring, &shortstring[j], i);substring[i]='\0';    //这里杜绝了覆盖重叠的部分,‘\0后的内容不输出’cout<<substring<<" ";if(strstr(longstring, substring)!=NULL)return substring;}cout<<endl;}return NULL;}/// 输入字串一:aocdfe  字串二:pmcdfa///下面为寻找的方法/// 第一轮: aocdf ocdfe        /// 第二轮: aocd  ocdf   cdfe /// 第三轮: aoc   ocd    cdfint main(){char *str1=(char*)malloc(256);char *str2=(char*)malloc(256);char *comman=NULL;gets(str1);gets(str2);if(strlen(str1)>strlen(str2)) //将短的字符串放前面comman=commanstring(str2, str1);elsecomman=commanstring(str1, str2);printf("the longest comman string is: %s\n", comman);}


0 0
原创粉丝点击