黑马程序员技术交流社区

标题: 程序运行找错!还有看看能不能简化!! [打印本页]

作者: 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