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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#include"stdio.h"
#include"string.h"
struct equeString
{
        char equeStr[100];//公共字符串
        int  counts;//公共字符串的长度
};

struct equeString strfg1[100];
struct equeString strfg2[100];
//把一个字符串按照指定长度分割成n个长度相等的字符串如:指定长度是3,
//要被分割的字符是itcast,那么分割的结果是:itc、tca、cas、ast
//len:数组的长度 *p指向要被分割的字符串 lenfg:指定分割的长度

int fenge(int len,char*p,int lenfg)
{
        //分割之后数组的个数
        int strfgCounts;
        //定义一个临时变量
        int temp,temp1;
        strfgCounts = len-lenfg+1;
        for( temp=0 ; temp<strfgCounts ; temp++ )
        {
                for(temp1=0; temp1<lenfg; temp1++)
                {
                   strfg1[temp].equeStr[temp1] = *( p+temp1 + (temp ) );
                }
                strfg1[temp].equeStr[temp1+1] = '\0';
        }
               
        return strfgCounts;
}

//把一个字符串按照指定长度分割成n个长度相等的字符串如:指定长度是3,
//要被分割的字符是itcast,那么分割的结果是:itc、tca、cas、ast
//len:数组的长度 *p指向要被分割的字符串 lenfg:指定分割的长度
int fenge2(int len,char*p,int lenfg)
{
        //分割之后数组的个数
        int strfgCounts;
        //定义一个临时变量
        int temp,temp1;
        strfgCounts = len-lenfg+1;
        for( temp=0 ; temp<strfgCounts ; temp++ )
        {
                for(temp1=0; temp1<lenfg; temp1++)
                {
                   strfg2[temp].equeStr[temp1] = *( p+temp1 + (temp ) );
                }
                strfg2[temp].equeStr[temp1+1] = '\0';
        }
               
        return strfgCounts;
}
//找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。
int main(void)
{

        //定义一个变量用来存储
        int maxcounts = 0;
        //定义一个临时变量

        int temp = 0;
        int temp1 = 0;
        int temp2 = 0;
        int temp3 = 0;
        int temp4 = 0;

        //定义两个字符串变量用来存储键盘输入的字符串

        char str1[100] , str2[100];

       
        printf("请输入字符串1\n");
        gets(str1);

        printf("请输入字符串2\n");
        gets(str2);
       
    //寻找最大公共部分

        if(strlen(str1) < strlen(str2))
        {
       
                printf("字符串1的长度是:%d\n字符串2的长度是:%d\n",strlen(str1),strlen(str2));
                 for( temp = strlen(str1); temp > 0; temp-- )
                 {
                        //分割键盘输入的字符串 把分割之后的字符串个数分别存入temp1、特姆坡中
                        temp1 = fenge(strlen(str1),str1,temp);
                        temp2 = fenge2(strlen(str2),str2,temp);
       
                        //通过循环来比较分割之后的字符串是否相等
                        for( temp4 = 0; temp4<temp2; temp4++)
                        {
                                for( temp3 = 0; temp3<temp1 ; temp3++)
                                {
                                        //比较两个字符是否相等
                                        if( strcmp(strfg2[temp4].equeStr , strfg1[temp3].equeStr ) == 0 )
                                        {
                                                maxcounts = 1 ;
                                                printf("最大公共字符串为:");
                                                puts( strfg2[temp4].equeStr );
                                        }                                       
                                }
                        }
                        if( maxcounts == 1 )
                        {
                                return 0;       
                        }
                 }
        }
        else if(strlen(str1) > strlen(str2))
        {
                for( temp = strlen(str1); temp > 0; temp-- )
                 {
                        //分割键盘输入的字符串 把分割之后的字符串个数分别存入temp1、特姆坡中
                        temp1 = fenge(strlen(str1),str1,temp);
                        temp2 = fenge2(strlen(str2),str2,temp);
       
                        //通过循环来比较分割之后的字符串是否相等
                        for( temp4 = 0; temp4<temp1; temp4++)
                        {
                                for( temp3 = 0; temp3<temp2 ; temp3++)
                                {
                                        //比较两个字符是否相等
                                        if( strcmp(strfg2[temp3].equeStr , strfg1[temp4].equeStr ) == 0 )
                                        {
                                                maxcounts = 1 ;
                                                printf("最大公共字符串为:");
                                                puts( strfg2[temp3].equeStr );
                                        }                                       
                                }
                        }
                        if( maxcounts == 1 )
                        {
                                return 0;       
                        }
                 }
                 
        }
         if( strcmp (str1,str2 ) == 0)
        {
               
                {
                        maxcounts = 1 ;
                        printf("最大公共字符串为:");
                        puts(str1);
                }
        }
return 0 ;
}

1 个回复

倒序浏览
用了最笨的的办法实现的,有很多地方需要优化,如:结构体数组可以定义成二维数组……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马