- #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");
- }
- }
复制代码 |