本帖最后由 董月峰 于 2014-6-2 21:55 编辑
大神代码看不懂,不明觉历!
感觉楼主大神的代码和求多个字符串的最大公共子串没有神马关系我给个求2个字符串之间最大公共子串的做法
- 主函数大约这么写的
- printf("请输入第一个字符串 :\n");
- gets(ss1);
- int len_s1=strlen(ss1);
- printf("请输入第二个字符串 :\n");
- gets (ss2);
- int len_s2=strlen(ss2);
- maxstr(ss1,ss2,len_s1,len_s2);
复制代码
调用的函数
- //比较2个字符串最大公共子串(串1,串2,串1长,串2长)
- void maxstr(char *s1,char *s2,int num1,int num2)
- {
- //index表示字符相同时s1初始角标,n2表示公共子串初始长度是0,n1表示每个公共子串的长度
- int index=0,n2=0,n1;
- //遍历s1
- for(int i = 0; i <= num1; i++)
- {
- //遍历s2
- for(int j = 0; j <= num2; j++)
- {
- //若遇到相同字符
- if(s1==s2[j])
- {
- //先赋值子串长度是1
- n1 = 1;
- //看从相同字符向后有多少字符还相同
- for(int k = 1; s1[i+k]==s2[j+k]; k++)
- //每多一个相同字符,n1自增1
- {
- n1++;
- }
- //取n2为最长的n1
- if(n1 > n2)
- {
- //记录最长n2时候,s【i】的角标位置index
- index = i;
- n2 = n1;
- }
- //再与s1比较,从s2【n1+j】即可
- j += n1;
- }
- }
- }
- //当存在子串时候,输出最大的
- if(n2 !=0)
- {
- printf("最长的公共子串:");
- for(int i = 0; i < n2; i++)
- printf("%c",s1[index+i]);
- }
- //不存在子串输出没有
- else
- printf("没有公共子串!\n");
- }
复制代码
|