09给定任意俩组字符串S1和S2,请编程输出他们间的最大相同子串

#include <iostream>
#include <stdio.h>
#include <string.h>
#define N 255
using namespace std;
/*
    本题题目:给定任意俩组字符串S1和S2,请编程输出他们间的最大相同子串

    本题不能用KMP算法,KMP算法找到额是子串在母串中的位置,即子串是母串的一部分,与本题不一样,不要理解错误了

    本解:是用暴力算法求解;

    本题获得的启示,就是写一个函数的时候尽量不要写全局变量,否则你这个函数只能在这个程序中使用,别人要调用时根本没法用,比如本题
    为什么要传入一个多余的char *s;其实设置一个全局变量start1更好,不用开空间,但是这样别人就在其他程序就想用你的这个函数,就没法
    用了,除非他也设置一个全局变量,这样就太麻烦了,不过main函数中的全局变量到无所谓,别人不可能调用你的main函数的;
*/
//返回字符串str1与str2的最大公共子串的长度;
int maxSubString(char *str1,char *str2,char *s)
{
    int start1=-1 ; //start1记录相同子串在str1的位置;
    int longest=0;
    int str1Long = strlen(str1);
    int str2Long = strlen(str2);
    int tempLength = 0;
    for(int i =0;i<str1Long;++i){
        for(int j=0;j<str2Long;++j){
            //非常关键的一点,忘记了使用临时的变量来记录i,j值,这样就得不到正确的结果
            int n=i,m = j;//m,n是临时变量,用来临时计数的
            while(n<str1Long&&m<str2Long){
                if (str1[n] == str2[m]){
                    ++tempLength;//记录临时最长的公共子串的长度
                    ++n;
                    ++m;
                }
                else break;
            }
            if(longest < tempLength){
                longest = tempLength;
                start1 = i;
            }
            tempLength=0;//记得初始化为0
        }
    }
    //将最大字符子串赋给s[],因为数据是可以传指针的,所以s[]在main函数也可以用,为什么这么做,就是为了不设置全局变量,达到解耦的目的;
    for(int i=0;i<longest;++i){
        s[i] = str1[start1];
        start1++;
    }
    return longest;
}

int main()
{
    char str1[] = "qweh887kjl" ;
    //为什么加个scanf输入到str1所指的地址windows就报错呢?
    //char *str1 ="qweh887kjl" ;
//    scanf("%s",str1);
    char str2[] = "wekjlweh887de";
    //为什么设置char *s时,传入s会发生windows运行不了呢?
    char s[N];
    int longest =0;
    longest = maxSubString(str1,str2,s);
    for(int i = 0;i<longest;++i){
        printf("%c",s[i]);
    }
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值