Ⅰ 用c语言编写一个函数,找出两个字符串的最大公共子字符串。
#include<stdio.h>
#include<string.h>
char *maxcommonstr(char *a,char *b);
int main()
{
char s[] = "abcabcdefabc";
char *d = "adcdef";
char *common=NULL;
common = maxcommonstr(s,d);
puts(common);
return 0;
}
char *maxcommonstr(char *a,char *b)
{
static char d[255] = {0};//存储最大公共字串
char temp[255]={0};//临时存储公共字串
char *p = NULL,*q = NULL,*r = NULL,*s =NULL;
while(*a)//从第一个字符开始遍历a串
{
p = a;//p指向a串
q = b;//q指向b串
r = temp;
for(s = q;s <= b +strlen(b); s ++)//从第一个字符开始遍历b串
{
q = s;
while( *p && *q && *p == *q )// 若相等则赋值后移指针
{
*r = *p;
p ++;
q ++;
r ++;
}
}
*r = '\0';//末尾手动补0
if(strlen(temp) > strlen(d)) //如果此趟字串比以记录最大字串长 则改变最大字串存储
strcpy(d,temp);
a++;// a串后移
}
return d;
}
仅供参考……
Ⅱ c语言找字符串最大公共字符串的程序,求改错
1for(i=maxlen,j=0;i<(maxlen+maxpos);i++,j++)
这一行复制的时候错了。。
应该是i=maxpos
2还有就是
for(k=1;(s1[i+k]==s2[j+k])&&(s1[i+k]!=0);k++)
这个s1[i+k]!=0应该是s1[i+k]!='