求两个字符串的最大公共子串【培训第三天】

来源:互联网 发布:mac 系统恢复 编辑:程序博客网 时间:2024/04/29 21:24

今天不提了,比昨天好一些,可是还是跟不上老师的节奏,我感觉要急死了。一晚上只做出了一道作业题,而且还是从百度看到之后自己琢磨的,注释已经加全了,想看的朋友也可以拷贝过去看一下。
早上8:15分到了楼下,去吃了个早饭8:33到教室。晚了三分钟,班主任就给我记了一次迟到,还说一共只有三次机会,妈蛋!好不爽,我以为就几分钟没事的,昨天班主任都那么晚才来。
唉!

#include<stdio.h>int main(){    //定义两个字符串    char str1[100] = { 0};    char str2[100] = { 0};    //显示的提示信息    printf("请输入要比较的两个字符串,以回车结束 \n");    //接收输入的字符串    gets(str1);    gets(str2);    int max = 0;    //用来存放最长公共子串    int num = 0;    //用来存放当前的公共子串长度    //定义p1,p2,分别存放str1和str2的当前比较位置    char *p1 = str1;    char *p2 = str2;    //定义start,存放最长公共子串的起始位置    char *start;    while (*p1 != '\0') //字符串str1开始循环,p1不为‘\0’,说明字符串 str1没有到末尾    {        p2 = str2;  //存放字符串str2的起始位置        while (*p2 != '\0') //字符串str2开始循环和str1进行比较        {            char * begin = p1;  //begin是str1当前的比较位置            char * begin2 = p2; //begin2是str2当前的比较位置            num = 0;    //初始化            while ((*begin != '\0') && (*begin2 != '\0'))   //可以多次循环比较            {                if (*begin == *begin2)  //若两个数相同,数值依次递加                {                    num++;                    begin++;                    begin2++;                }                else                {                    break;                }            }            //若新比较出的字串更长,则替换max值和start内容            if (num > max)            {                max = num;                start = p1; //start放置最大字符串的首地址            }            p2++;   //字符串str2向后移动一位        }        p1++;   //字符串str1向后移动一位    }    //打印最大的公共子串    while(max--)    {        printf("最大的公共子串为:%c",*start++);    }    printf("\n");}
0 0