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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaoqu1998 中级黑马   /  2015-1-20 11:43  /  1389 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。

#include <stdio.h>
#include <string.h>
int main()
{
    void maxSameString(char *s1,char *s2);
    char *s1="nbitheimanb";
    char *s2="citheia";
    maxSameString(s1, s2);
    return 0;
   
}
void maxSameString(char *s1,char *s2)
{
    //定义两个字符串的长度
    long int s1len=strlen(s1);
    long int s2len=strlen(s2);
    int count=0; //定义最大公共字符串的长度
    int index=0; // 定义坐标
    for (int i=0; i<=s1len; i++)
    {
        for (int j=0; j<=s2len; j++)
        {
            if (s1[i]==s2[j]) //如果两个相等 全部向下移动
            {
                for (int k=1; s1[i+k]==s2[j+k] && s1[i+k]!='\n' && s2[j+k]!='\n'; k++)
                {
                    if (k>count)
                    {
                        count =k;
                        index =i;
                    }
                }
            }
        }
    }
   
   
    for (int i=0; i<count; i++) {
        printf("%c",s1[index+i]);
    }
}

5 个回复

倒序浏览
因为少统计了一个数。当他们只有一个相同时,则不能打印出来了
回复 使用道具 举报
mengxingdong 发表于 2015-1-20 14:04
因为少统计了一个数。当他们只有一个相同时,则不能打印出来了

怎么改?
回复 使用道具 举报

  if (s1==s2[j]) //如果两个相等 全部向下移动
            {
....
}

在这条语句上加上COUNT+1试试。我也没有调试
回复 使用道具 举报
有人会吗,不要沉
回复 使用道具 举报
看了会好累  为什么不写注释 :)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马