是我太笨还是怎么样?
热门软件下载:
函数 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这样回答就好了。。在这先谢了!!
推荐阅读
相关评论