Ⅰ 用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]!='