A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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;//结束函数
}

本帖被以下淘专辑推荐:

2 个回复

倒序浏览
本帖最后由 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;
        }
    }

回复 使用道具 举报
我也是为这道题纠结啊,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马