共同学习
#include <stdio.h>
#include <string.h>
//定义一个函数,功能是获取两个字符串的最大公共子字符串
//形参分别为字符型指针变量str1、str2和整型常量 num1、num2
int getMaxSonStr(char *s1, char *s2, int len1, int len2)
{
//index表示出现第一个相同字符时str1中对应字符的下标
int index = 0;
//m 表示公共子串初始长度是0, n表示每个公共子串的长度
int m = 0, n = 0;
//遍历s1
for (int i = 0; i < len1; i++)
{
//遍历s2
for (int j = 0; j < len2; j++)
{
//遇到相同字符时
//s1[i] != '\0'可以防止越界
if (s1[i] ==s2[j] && s1[i] != '\0')
{
//子串长度为1
m = 1;
//s1[i+k]!='\0',结束符相等不比较,预防越界
for (int k = 0; s1[i+k] == s2[j+k] && s1[i+k]!='\0'; k++)
{
//没多一个相同字符,子串长度自增+1
m++;
}
//假定n为最长的子串的长度
if(m > n)
{
//记录最长子串的起始下标
index = i;
//将最长子串的长度值赋值给最大公共子串长度
n = m;
}
}
}
}
//当存在子串时候,输出最大的
if(m !=0)
{
printf("最长的公共子串:");
for(int i = 0; i < m; i++)
{
printf("%c",s1[index+i]);
}
}
//不存在子串输出没有
else
printf("没有公共子串!\n");
return 0;
}
int main(int argc, const char * agv[])
{
//定义两个字符串str1和str2,并对其进行初始化
char str1[110];
char str2[110];
//提示用户输入第一个字符串
printf("请输入第一个字符串:\n");
//接收用户输入的字符串
gets(str1);
//提示用户输入第二个字符串
printf("请输入第二个字符串:\n");
//接收用户输入的字符串
gets(str2);
//计算输入字符串str1的长度
int len_str1 = strlen("str1");
//计算输入字符串str2的长度
int len_str2 = strlen("str2");
//调用函数,获取两个字符串的最大公共子字符串
getMaxSonStr(str1,str2,len_str1,len_str2);
printf("\n");
return 0;
}
|