黑马程序员技术交流社区

标题: 求指教 [打印本页]

作者: feiyiban    时间: 2016-3-18 00:44
标题: 求指教


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

#include <stdio.h>
#include <string.h>
int  main()
{
   
    char *s1 = "nbitheimanbcf";
    char *s2 = "itheia";
   
    void maxPublicString(char *s1,char *s2);
    maxPublicString(s2,s1);
   
    return 0;
}
void maxPublicString(char *s1,char *s2)
{
    //分别求出s1,s2字符串的长度
    int s1len = strlen(s1);
    int s2len = strlen(s2);
   
    //记录相同元素下标,记录相同的元素个数
    int index = 0 ,count = 0;
   
    //遍历s1
    for(int i = 0; i<s1len ; i++)
    {
        
        //遍历s2
        for(int j = 0; j<s2len; j++)
        {
            
            //取出s2的每一个元素s1进行比较,
            if(s1[i]==s2[j])
            {
                //如果有相同的元素,则同时都往后面移动
                for(int k = 1 ;s1[i+k]==s2[j+k] && s2[j+k]!='\0' && s1[i+k]!='\0' ;k++)
                {
                    //选出最大公共字符串
                    if(k>count)
                    {
                        //记录最大公共字符串长度的下标
                        count =k;
                        
                        //记录最大公共字符串长度的个数
                        index = i;
                        
                    }
                }
            }
            
        }
    }
    if(count == 0)
    {
        printf("没有找到最大公共子串\n");
    }
    else
    {
        printf("最长公共字串是:");
        
        for(int i = 0 ; i<=count; i++)
        {
            printf("%c",s1[index+i]);
        }
    }
    printf("\n");
   
}
作者: 15527933998    时间: 2016-3-18 08:48
我运行了下,还换了字符的位置都没有问题咕~~(╯﹏╰)b,非常棒!!!
作者: 外号狐狸    时间: 2016-3-18 21:58
#include "stdio.h"
#include "string.h"

void tempstr(char str1[],char str2[]){
    char temp[20];
    int l = 0;

    for (int i = 0; i<strlen(str1); i++) {

        for (int j = 0; j<strlen(str2); j++) {

            if (str1[i] == str2[j] && str2[j+1] == str1[i+1] && str1[i+1]!='\0') {

                temp[l] = str2[j];

                temp[l+1] = str2[j+1];

                l++;

                break;
              
            }
   
        }
    }

   
     printf("最大公共字符:%s\n",temp);
}
int main(){

    char a[] = "nbitheiman";

    char b[] = "itheia";

    tempstr(a,b);

    return 0;
}

这样写会不会有弊端,帮我看看




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