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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© shixichen 中级黑马   /  2015-1-17 19:05  /  1038 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对于零基础的人来说明显不会啊 只会2个字符串的

10 个回复

倒序浏览
那道题按两个算就行的。
回复 使用道具 举报
从今以后 发表于 2015-1-17 19:12
那道题按两个算就行的。

不过我又加了点东西 长度相同的子串都能输出 但是会重复
回复 使用道具 举报
楼主的代码可以贴出来学习下么?
回复 使用道具 举报
贴出来看一下代码
回复 使用道具 举报
liu1170486003 发表于 2015-1-18 00:50
楼主的代码可以贴出来学习下么?

不好意思献丑啊:(
回复 使用道具 举报
#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;
}
回复 使用道具 举报
liu1170486003 发表于 2015-1-18 00:50
楼主的代码可以贴出来学习下么?

贴出来了 你看下
回复 使用道具 举报
好好看看基础视频
回复 使用道具 举报

我在想三层循环是极限了么,感觉这样损失效率。
回复 使用道具 举报
liu1170486003 发表于 2015-1-19 00:47
我在想三层循环是极限了么,感觉这样损失效率。

我也有感觉 但是我还是相信计算机的脑袋
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马