阅读以下程序说明和C程序,将应填入(n)处的子句,写在对应栏内。 【程序说明】 函数int commstr(char * str1,char * str2,int * sublen)从两已知字符串str1和str2中,找出它们的所有最长的公共子串。如

admin2009-02-15  21

问题 阅读以下程序说明和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;
   }
   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

解析
转载请注明原文地址:https://jikaoti.com/ti/XTW7FFFM
0

最新回复(0)