面试中遇到的,后来看到了有大神的解答,有的还是不大明白,就把自己的贴出来:
#include<stdio.h>
#include<string.h>
void m_p_str(char *str_1,char *str_2)
{
int i,j,k;
int str_1_len = strlen(str_1);
int str_2_len = strlen(str_2);
int index = 0;//记录最大公共字符下标开始的位置
int num = 0;//记录最大公共的个数
for(i=0;i<str_1_len;i++)
{
for(j=0;j<str_2_len;j++)
{
if(str_1[i]==str_2[j])//如果有相同的元素,则同时都往后面移动
{
for(k=1;str_1[i+k]==str_2[j+k]&&str_2[j+k]!='\0'&&str_1[i+k]!='\0';k++)
{
if(k>num)//比较看是不是最长的哪一个
{
num=k;//如果是,记录其最大公共的个数
index = i;//并记录其下标开始的位置
}
}
}
}
}
if(num==0)//即最大公共的个数为0
{
printf("这两个字符串中无公共字符!\n");
}
else
{
printf("这两个字符串最大公共字符串是:\t");
for(i=0;i<=num;i++)
{
printf("%c",str_1[index+i]);
}
printf("\n");
}
printf("公共字符从第: %d 个开始\n",index+1);
printf("公共字符最多一共有: %d 个\n",num);
printf("检索完毕!\n");
}
void main()
{
char str_1[100];
char str_2[100];
printf("请输入字符串一:\t");
gets(str_1);
printf("请输入字符串二:\t");
gets(str_2);
m_p_str(str_2,str_1);
}
结果是:
欢迎讨论,共同学习--------一个码农的成长历程