黑马程序员技术交流社区
标题:
程序运行找错!还有看看能不能简化!!
[打印本页]
作者:
FlyTrem
时间:
2014-3-17 18:21
标题:
程序运行找错!还有看看能不能简化!!
本帖最后由 FlyTrem 于 2014-3-23 17:41 编辑
找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是“ithei”。(C语言)
好像如果是最后的公共字符长的话,无法判断???是什么原因!!!
#include<stdio.h>//调用printf函数需要声明的头文件
#include<string.h>//调用strlen函数需要声明的头文件
//定义函数,主要是用来辨别各个字符串的长度,返回最短的字符串长度
int len(char a[], char b[], char c[])
{
int size,size1, size2,size3;
size1 = strlen(a);
size2 = strlen(b);
size3 = strlen(c);
size = size1;
if (size2 < size)
size = size2;
if (size3 < size)
size = size3;
return (size);
}
//定义主函数
int main()
{
int k,size,i=0,max=0,j=0,m;//定义整型变量看,k,i,max,j,m,并将0赋给i,max,j。
//定义字符串a[],b[],c[]。
char a[] = "afasdfdaaaaafghssggggg";
char b[] = "asasdfsaaaaadagggg";
char c[] = "dsasdfdaaaaafadfggg";
size = len(a, b, c);//引用函数len
for (k = 0; k < size; k++)//遍历小于siae字节数的所有字符
{
if (a[k] == b[k] && a[k] == c[k])//如果a[k] == b[k] && a[k] == c[k]则执行下面语句
{
i++;
continue;//跳出本次循环,直接判断上级循环条件
}
if (i>max)
{
//记录最长公共字符的起始角标和总结角标
max = i;
j = k - i;
m = k;
i = 0;
}
}
printf("最大子字符串是\n");
//历遍j到(m-1)的所有字符
for (i = j; i<m; i++)
//打印每个a
printf("%c", a
);
return 0;//结束函数
}
作者:
z82454642
时间:
2014-3-17 19:42
本帖最后由 z82454642 于 2014-3-17 19:44 编辑
这里不对,只用一个下标没有用,这样写等于是直接拿3个字符串比较0到size-1位置的字符比较,这样得不到公共字符串的
for (k = 0; k < size; k++)//遍历小于siae字节数的所有字符
{
if (a[k] == b[k] && a[k] == c[k])//如果a[k] == b[k] && a[k] == c[k]则执行下面语句
{
i++;
continue;//跳出本次循环,直接判断上级循环条件
}
if (i>max)
{
//记录最长公共字符的起始角标和总结角标
max = i;
j = k - i;
m = k;
i = 0;
}
}
作者:
Jiang_053
时间:
2014-6-13 18:51
我也是为这道题纠结啊,,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2