黑马程序员技术交流社区

标题: 多个字符串的最大子串 [打印本页]

作者: shixichen    时间: 2015-1-17 19:05
标题: 多个字符串的最大子串
对于零基础的人来说明显不会啊 只会2个字符串的
作者: 从今以后    时间: 2015-1-17 19:12
那道题按两个算就行的。
作者: shixichen    时间: 2015-1-18 00:05
从今以后 发表于 2015-1-17 19:12
那道题按两个算就行的。

不过我又加了点东西 长度相同的子串都能输出 但是会重复
作者: liu1170486003    时间: 2015-1-18 00:50
楼主的代码可以贴出来学习下么?
作者: baihe0813    时间: 2015-1-18 08:55
贴出来看一下代码
作者: shixichen    时间: 2015-1-18 22:38
liu1170486003 发表于 2015-1-18 00:50
楼主的代码可以贴出来学习下么?

不好意思献丑啊:(
作者: shixichen    时间: 2015-1-18 22:40
#include <stdio.h>
#include <string.h>
int main()
{
    //用来存储字符串
    char str1[100];
    char str2[100];
   
    //接受输入
    printf("请输入第一个长度小于100的字符串:");
    scanf("%s", str1);
    printf("请输入第二个长度小于100的字符串:");
    scanf("%s", str2);
   
    //用来存储字符串长度
    int len1 = strlen(str1);
    int len2 = strlen(str2);
   
   
    //用来存储当前长度和最大长度
    int count = 0;
    int max = 0;

    //计算最大长度
    for (int i = 0; i < len1; i++)
    {
        for (int j = 0; j < len2; j++)
        {
            if(str1[i] != '\0' && str1[i] == str2[j])//遇到相同字符
            {
                int k = 0;
               
                while (str1[k+i] != '\0' && str1[k+i] == str2[k+j])//开始判断从相同字符之后的相同字符长度
                {
                    count++;
                    k++;
                }
               
                if (count > max)//当前和最大作比较
                {
                    max = count;
                }
            }
            
            count = 0;//清零,重新开始计算长度
            
        }
    }
   
    //用来限制循环次数
    int c1 = len1 - max + 1;
    int c2 = len2 - max + 1;
   
    //通过比较得到count,当count和max相同时就输出
    for (int i = 0; i < c1; i++)
    {
        for (int j = 0; j < c2; j++)
        {
            if(str1[i] != '\0' && str1[i] == str2[j])
            {
                int k = 0;
               
                while (str1[k+i] != '\0' && str1[k+i] == str2[k+j])
                {
                    count++;
                    k++;
                }

                if (count == max)//如果相同
                {
                    int a3 = j;
                    
                    for (int p = 0; p < max; p++)//从相同的字符开始输出长度为max的字符串
                    {
                        printf("%c", str2[a3]);
                        a3++;
                    }
                    
                    printf("\n");
                }
            }
            count = 0;
        }
    }
   
    return 0;
}
作者: shixichen    时间: 2015-1-18 22:42
liu1170486003 发表于 2015-1-18 00:50
楼主的代码可以贴出来学习下么?

贴出来了 你看下
作者: Dance小飞    时间: 2015-1-18 22:49
好好看看基础视频
作者: liu1170486003    时间: 2015-1-19 00:47
shixichen 发表于 2015-1-18 22:42
贴出来了 你看下

我在想三层循环是极限了么,感觉这样损失效率。
作者: shixichen    时间: 2015-1-19 22:16
liu1170486003 发表于 2015-1-19 00:47
我在想三层循环是极限了么,感觉这样损失效率。

我也有感觉 但是我还是相信计算机的脑袋




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2