#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 ;
}
|
|