当前位置:首页 » 业界相关

是我太笨还是怎么样?

 Advertisement:

热门软件下载:


函数   int   commstr(char   *str1,char   *str2,int   *sublen)   从两已知字符串   strl   和   str2    
  中,找出它们的所有最长的公共子串。如果最长公共子串不止   1个,函数将把它们全部找出,并输  
  出。约定空串不作为公共子串。  
          函数将最长公共子串的长度送入由参数   sublen   所指的变量中,并返回字符串   str1   和   stf2    
  的最长公共子串的个数。如果字符串   strl   和   str2   没有公共子串,约定最长公共子串的个数和最  
  长公共子串的长度均为   0   。  
  [程序]  
      int   strlen(char   *s)  
      {     char   *   t   =   s;  
            while   (*t++);  
            return   t-s-1;  
      }  
      int   commstr(char   *str1,char   *str2,   int   *sublen)  
      {   char*sl,*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++;     /*   计数增       */  
                                            }  
                          }  
                    }  
                    if   (count   >   0   )   break;  
              }  
          *sublen   =   (count   >   0)   ?   __(5)__   ;   0   ;  
          return     count;  
      }  
  这是98年程序员试题中的一道,为什么当我拿到题目看得有点模糊,似懂非懂,可填起空来就不行了啊,我想问问大家的就是这个程序为什么要用这么多循环?  
  第一空直接填k<=len2可以吗?第二空填s1[i]!=0可以吗?第三空填s1[i]==s2[k]  
  其它空看了答案还好理解点。有哪位高手可以详细解答一下吗?最好举个例子来说明一下,各种情况都说一下,小弟希望通过这里学到更多的东西。希望大家像http://expert.csdn.net/expert/topic/1721/1721050.xml?temp=.1242792这样回答就好了。。在这先谢了!!

.

推荐阅读

  • 小道消息:T3有SD卡问题? [详细内容]
  • 别买数码伴侣了!爱国者60G MP4只要2999元 [详细内容]
  • 蓝牙设备的摩登时代 手机玩得更精彩 [详细内容]
  • 来电防火墙手机之阿尔卡特OT331 [详细内容]
  • 试用充10000元移动话费的3230 [详细内容]
  • 三星首款蓝牙耳机WEP150现身西安 [详细内容]
  • 配备 DVD光驱的方正颐和T3500D [详细内容]
  • 网友回答:
     

    相关评论

    Login