下面这个程序:C语言求两个字符串最长公共子字符串哪里有问题啊 求高手指导

2025-03-03 08:56:13
推荐回答(2个)
回答1:

这段程序有三处错误:
1. char a1[80],a2[80],b1[80],b2[80];
这行代码中的 b1[80],b2[80]要初始化,避免在输出时出现错误码。
2.char ch1,ch2;
这行代码应该放在程序的开头定义。
3.
do
{
if (a1[m] == a2[n])
{
b1[k] = a1[m];
word++;
}
else
break;
m++;
n++;
//这忘了写k++;了。如果不写的话b1[k] = a1[m];这行代码中的b1[k]的k值是不变的,
//也就是说b1[k]中存储的值会被覆盖。
}while(((ch1 = a1[m]) != '\0') && ((ch2 = a2[n]) != '\0'));
-----------------
下面是改过后的代码:
#include
#include
#include
void main()
{
//-------------------------------------------------//
char a1[80],a2[80],b1[80]="",b2[80]="";
//-------------------------------------------------//
int i, j, m, n,word = 0, max = 0, k = 0;
int flag = 1;
//------------------------------------//
char ch1,ch2;
//-----------------------------------//
printf("请输入字符串数组a1:");
gets(a1);
printf("\n请输入字符串数组a2:");
gets(a2);
//char ch1,ch2;//上移的代码开头定义。
for (i = 0;(ch1 = a1[i]) != '\0'; i++)
{
for (j = 0;(ch2 = a2[j]) != '\0';j++)
{
if (ch1 == ch2)
{
k = 0;
word = 0;
b1[k] = ch1;
m = i + 1;
n = j + 1;
word++;
k++;
do{
if (a1[m] == a2[n])
{
b1[k] = a1[m];
word++;
}else break;
m++;
n++;
//-------------------------------//
k++;//添加代码
//--------------------------------//
}while(((ch1 = a1[m]) != '\0') && ((ch2 = a2[n]) != '\0'));
while(flag)
{
if (((ch1 = a1[m]) != '\0') && ((ch2 = a2[n]) != '\0') && (a1[m] == a2[n]))
{
b1[k] = a1[m];
word++;
m++;
n++;
}else flag = 0;
}
if (word >= max)
{
max = word;
strcpy(b2,b1);
}
}
}
}
printf("\n字符串a1与字符串a2的最大公共子字符串有%d个字符,它们是:", max);
puts(b2);
}

回答2:

很复杂耶