#想把每个字符串的所有子串都用二维数组存起来,结果二维数组的输出结果包含乱码,运行结果也不正确是为什么?
//三个的最长公共子串
#include<stdio.h>
#include<string.h>
#define N 100
int fun(char a[N],char *b[N][50])//二维数组存储子串
{
char *p=a,*q,temp[N];
char *t;
int i,k=0;
while(*p!='\0')//取子串的起始位置
{
i=0;//i=子串的长度-1
while(*(p+i)!='\0')//长度不超过原来字符串尾
{
t=temp;//temp用于暂时存放取出的子串
for(q=p; q<=p+i ;q++,t++)//q用来遍历取子串
{
*t=*q;//往t里存子串
}
*t='\0';//给temp加结束符
strcpy(b[k++],temp);//把一个子串赋给二维数组b的一层
i++;//长度加1
}
p++;//起始位置后移1
}
return(k);//返回b中子串个数
}
void output(char a[N][50])
{
int i;
for(i=0;i<N;i++)
{
puts(a[i]);
}
}
int main()
{
char a[N],b[N],c[N],aa[N][50],bb[N][50],cc[N][50],ch[50];
int i,len1,j,len2,k,len3,max=0;
printf("a:");
gets(a);
printf("b:");
gets(b);
printf("c:");
gets(c);//用户输入
len1=fun(a,aa);
len2=fun(b,bb);
len3=fun(c,cc);//求出所有子串
output(aa);//测试输出,结果执行有很多乱码
printf("%d %d %d\n",len1,len2,len3);
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
for(k=0;k<len3;k++)
if( strcmp(aa[i],bb[j])==0 && strcmp(aa[i],cc[i])==0 )
if(strlen(aa[i])>=max)
{
max=strlen(aa[i]);
strcpy(ch,aa[i]);
}
printf("最长共同单词为:%s",ch);
return 0;
}