黑马程序员技术交流社区

标题: 求大神解答这道题哪错了,面试题. [打印本页]

作者: xiaoqu1998    时间: 2015-1-20 11:43
标题: 求大神解答这道题哪错了,面试题.
找出多个字符串中的最大公共子字符串,如“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]);
    }
}
作者: mengxingdong    时间: 2015-1-20 14:04
因为少统计了一个数。当他们只有一个相同时,则不能打印出来了
作者: xiaoqu1998    时间: 2015-1-20 14:29
mengxingdong 发表于 2015-1-20 14:04
因为少统计了一个数。当他们只有一个相同时,则不能打印出来了

怎么改?
作者: mengxingdong    时间: 2015-1-20 16:12
xiaoqu1998 发表于 2015-1-20 14:29
怎么改?

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

在这条语句上加上COUNT+1试试。我也没有调试
作者: xiaoqu1998    时间: 2015-2-24 13:56
有人会吗,不要沉

作者: airbusa8310    时间: 2015-2-27 16:28
看了会好累  为什么不写注释 :)




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