软件水平考试

解析:【程序说明】 函数int commstr(char * str1,

来源:网考网软件水平 所有评论

【分析解答题】【程序说明】 函数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;{{U}} (1) {{/U}}<:len2;k++) /*k为子串s2的开始位置*/ {for(i=0;s1[{{U}} (2) {{/U}}]!=’\0’;i++;) /*i为子串s1的开始位置*/{ /*s1的子串与s2的子串比较*/ for (p=0;p<j)&&{{U}} (3) {{/U}};p++); if ({{U}} (4) {{/U}}) /*如果两子串相同*/ {for(p=0);p<j;p++}/*输出子串*/ printf ("%c",s2[k+p]); printf ("\n"); count++;/*计数增1 */ } } } if (count>0) break; *sublen=(count>0) {{U}} (5) {{/U}}:0; return count; }
网考网解析:
试题答案: 答案解析:(1)k+j (2)i+j-1 (3)s1[i+P]==s2[k+P] (4)P==j或p>=j (5)j [解析] 略。 document.getElementById("warp").style.display="none"; document.getElementById("content").style.display="block"; 查看试题解析出处>>

相关推荐

发布评论 查看全部评论