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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2014-5-23 20:50  /  2182 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
找出多个字符串中的最大公共子字符串,如“my name is Lilei”和“Lilei”的最大子串是:”Lilei”。(C语言)
思路:
如my name is Lilei 和 Lilei这两个字符串
将第一个字符串中的每一个字符拿出来去和第二个字符串中的字符比较,如果遇到相同的就将第一个字符位置加1与第二个字符串加1相比,直到两者的字符不再相等,将得到的字符串用字符串数组存储起来。
*/

#include <stdio.h>
#include <string.h>

void getStr(char *str1,char *str2,char *str3)
{
    //定义一个整形数来记住最大字符串的长度
    int max = 0;
    //定义一个整形数来记住相同字符的首地址
    int i,j,r;
    //获取str1的长度
    int len1 = strlen(str1);
    //获取str2的长度
    int len2 = strlen(str2);
   
    for (i = 0; i < len1; i++) {
        for (j = 0; j < len2; j++) {
            if (str1[i] == str2[j]) {
                //用于保存第一个相等的首地址
                //用于调试代码
                printf("找到相同的字符啦!!--- %c\n",str1[i]);
                int a = i,b = j,count = 1;
                /*
                当第一个相等后继续用str1的下一个字符与str2的下一个字符相比,直到字符串结束或者,字符不在相等
                */
                while ((a + 1 < len1)&&(b + 1 < len2)&&(str1[++a] == str2[++b])){
                        count++;
                }
                if (count > max) {
                    max = count;
                    r = i;
                    //用于调试代码
                    printf("最大的字符串长度是%d---位置是%d---最大值%d\n",count,r,max);
                }
            }
        }
    }
    //判断是否有公共字符串
    //如果有将存在的字符串存入str3中
    if(max > 0){
        for(int k=0;k<max;k++)
        {
            *(str3+k)=*(str1+r+k);
            printf("%c",str3[k]);
        }
      
    }
}
int main()
{
    //nbitheimanb”和“itheia”
    char str1[100] = "my name is Lilei";
    char str2[100] = "Lilei";
    char str3[100] = {0};
    getStr(str1,str2,str3);
    printf("%s\n",str1);
    printf("%s\n",str2);
    printf("%s\n",str3);
    return 0;
}

上面是我刚才写的代码,是用for循环实现的,不知道是否对你有用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马