#include <stdio.h> #include <string.h> void same_str( char *str1, char const *str2, char const *str3 ); void main() { char str1[10],str2[30],str3[30]; gets( str2 ); gets( str3 ); same_str( str1, str2, str3 ); printf("/n%s/n",str1); } void same_str( char *str1, char const *str2, char const *str3 ) { int i,j,k,len,max=0,n=0,len2,len3; char *temp; if ( strlen( str2 ) < strlen( str3 ) ) /*为了保证外层循环的那个字符串总是最长的*/ { temp = str2; str2 = str3; str3 = temp; } for ( i=0; *(str2+i)!='/0'; i++ ) { len = 0; for ( j=0,k=i; *(str3+j)!='/0'&&*(str2+k)!='/0'; j++,k++ ) { if ( *(str2+k) == *(str3+j) ) { len++; } else /*当下一个字符不相同时,要避免相隔相同的字母len累加*/ { if ( max < len ) { max = len; n = k-len; } len = 0; } } if ( max < len ) /*当一个字符串的末尾字符串相等时*/ { max = len; n = k-len; len = 0; } } for ( j=0; j<max; j++,n++ ) *str1++ = *(str2+n); *str1 = '/0'; }