1 #include <stdio.h> 2 #include <string.h> 3 4 void substr(char *s1, char *s2) 5 { 6 /* 1.设长串开始位置 p, 最大匹配串开始 结束位置 maxStart, maxEnd*/ 7 char *p = s1, *maxStart = s1, *maxEnd = s1; 8 char *q = s2; /* 设短串*/ 9 10 if(strlen(s1)<strlen(s2))/* 判断长串 短串, 更新指针*/ 11 { 12 p = s2,q = s1; 13 maxStart = maxStart = s2; 14 } 15 16 char *qt = q; /* 保存短串开始位置*/ 17 18 /* 2.计算最大匹配串 */ 19 while(*p++) /* 长串*/ 20 { 21 q = qt; /* 短串开始位置*/ 22 while(*q++)/*短串指针后移匹配*/ 23 { 24 char *pt = p; /* 保存长串指针位置*/ 25 while(*p == *q && *q)/* 一旦匹配, 长短串指针都后移*/ 26 { 27 p++,q++; 28 } 29 30 if((p-pt) > (maxEnd-maxStart))/* 更新最大匹配串指针*/ 31 { 32 maxStart= pt; 33 maxEnd = p; 34 } 35 } 36 } 37 /* 打印最大匹配串 */ 38 while(maxEnd>maxStart) 39 { 40 printf("%c",*maxStart++); 41 } 42 } 43 int main() 44 { 45 char str1[100] = "fffaabcdeeeeeyyyyy"; 46 char str2[100] = "fqbcabcmxxabcdnn"; 47 substr(str1, str2); 48 return 0; 49 }