#include <stdio.h> #include <string.h> void checknext(char *s1, char *s2, int i, int j, int *m); // 声明 void getPublicStr(char *str1, char *str2); // 声明 int main() { char *s1 = "nbitheimanb"; char *s2 = "itheia"; getPublicStr(s1,s2); return 0; } void checknext(char *s1, char *s2, int i, int j, int *m) { if(s2[i+1]==s1[j+1]&&s2[i+1]!='\0'&&s1[j+1]!='\0') { (*m)++; // 通过指针给长度+1 checknext(s1,s2,i+1,j+1,m); //递归查找下一个相同的字符 } } void getPublicStr(char *str1, char *str2) { int max = 0, start = 0, length=0; // 定义最大长度,开始下标,匹配长度 char *longstring;char *shortstring; // 定义较长字符串和较短字符串 if(strlen(str1)<strlen(str2)) // 将较长字符串赋给longstring,短字符串赋给shortstring { longstring = str2; shortstring = str1; } else { longstring = str1; shortstring = str2; } // 遍历 for(int i=0;i<strlen(longstring);i++) { for(int j=0;j<strlen(shortstring);j++) { //取出shortstring的每一个元素与longstring进行比较 if(longstring[i]==shortstring[j]) { length=1; checknext(longstring,shortstring,i,j,&length); // 首次执行完后获得第一个匹配字符串长度 } if(length>max) {max=length; start=i;} //如果长度大于最大长度,则保存最大值 } } if(max == 0) { printf("没有找到最大公共字符串\n"); } else { printf("最大公共字符串是:"); for(int k=start;k<(max+start);k++) { printf("%c",longstring[k]); // 循环输出最大公共字符串 } printf("\n"); } } |