1,给定字符串A和B,输出A和B中的最大公共子串。#include<stdio.h> #include<stdlib.h> #include<string.h> char *commanstring(char shortstring[], char longstring[]) { int i, j; char *substring=(char *)malloc(256); if(strstr(longstring, shortstring)!=NULL) //如果……,那么返回shortstring return shortstring; //思路:求出短字符串的所有字串,由长到短(i控制)。然后判断每个子串是否是长串的子串 for(i=strlen(shortstring)-1;i>0; i--) //否则,开始循环计算 { for(j=0; j<=(strlen(shortstring)-i); j++)//确定长度为i的子串有strlen(shortstring)-i个,且j表示每个子串的起始位置 { memcpy(substring, &shortstring[j], i); substring[i]='/0'; if(strstr(longstring, substring)!=NULL) return substring; } } return NULL; } int 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); else comman=commanstring(str1, str2); printf("the longest comman string is: %s/n", comman); return 0; }