试题与答案

【程序说明】 函数int commstr(char * str1,char * s

题型:问答题

题目:

【程序说明】
函数int commstr(char * str1,char * str2,int * sublen)从两已知字符串str1和str2中,找出它们的所有最长的公共子串。如果最长公共子串不止1个,函数将把它们全部找出并输出。约定空串不作为公共子串。
函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1和str2的最长公共子串的个数。如果字符串str1和str2没有公共子串,约定最长公共子串的个数和最长公共子串的长度均为0。
【程序】
int strlen(char * s)
char *t=s;
while( * ++);
return t-s-1;

int commstr(char) *str1,char *str2,int *sublen
char*s1, *s2;
int count=0,len1 ,len2,k,j,i,p;
len1:=strlen(str1)
len2 = strlen(str2);
if(len1>len2)
s1=str1 ;s2=str2;
else len2 = len1;s1 = str2;s2 = str1;
for(j=len2;j>0;j--) /*从可能最长子串开始寻找*/
for(k=0; (1) <:len2;k++) /*k为子串s2的开始位置*/
for(i=0;s1[ (2) ]!=’\0’;i++;) /*i为子串s1的开始位置*/
/*s1的子串与s2的子串比较*/
for (p=0;p<j)&& (3) ;p++);
if ( (4) ) /*如果两子串相同*/
for(p=0);p<j;p++ /*输出子串*/
printf ("%c",s2[k+p]);
printf ("\n");
count++;/*计数增1 */



if (count>0) break;
*sublen=(count>0) (5) :0;
return count;

答案:

参考答案:(1)k+j (2)i+j-1 (3)s1[i+P]==s2[k+P]
(4)P==j或p>=j (5)j

解析: 略。

试题推荐
微信公众账号搜索答案