您的位置:首页 > 编程语言 > C语言/C++

C语言:分别输入两段字符串,并找出其中的最大公共字符串

2016-01-03 17:10 295 查看
面试中遇到的,后来看到了有大神的解答,有的还是不大明白,就把自己的贴出来:

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


结果是:


欢迎讨论,共同学习--------一个码农的成长历程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: