●试题五 阅读以下程序说明和C程序,将应填入(n)处的子句,写在答卷纸的对应栏内。 【程序说明】 函数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 } intcommstr(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=str1s2=str2} else{len2=len1s1=str2s2=str1} for(j=len2j>0j--)/*从可能最长子串开始寻找* {for(k=0 (1) <=len2k++)/*k为子串s2的开始位置*/ {for(i=0s1[ (2) ]!='\0'i++)/* i为子串s1的开始位置*/ {/* s1的子串与s2的子串比较*/ for(p=0p if ( (4) )/*如果两子串相同*/ {for(p=0)p printf('%c',s2[k+p]) printf('\n') count++;/* 计数增1*/ } } } if (count>0)break *sublen=(count>0)? (5) :0 return count }