本帖最后由 EchoWill 于 2014-4-28 19:19 编辑
- #include <stdio.h>
- #include <string.h>
- void maxStr(char *s1 ,char *s2,int num1,int num2);
- int main(int argc, const char * argv[])
- {
-
-
- // 定义2个字符串
- char str1[1024],str2[1024];
- while (1) {
-
- printf("请输入第一个子串:\n");
- gets(str1);
- int len1 = strlen(str1); // 获取字符串str1的长度
-
- printf("请输入第二个子串:\n");
- gets(str2);
- int len2 = strlen(str2); // 获取字符串str2的长度
-
- maxStr(str1, str2, len1, len2);
-
- getchar();
- }
-
-
- return 0;
- }
- // 获取最大公共字符串,字符串s1长度num1,字符串s2长度num2
- void maxStr(char *s1 ,char *s2,int num1,int num2)
- {
- int index = 0; // 字符相同时,字符串s1的初始下标
- int n1; // 每个公共子串的长度
- int n2 = 0; // 公共子串的初始长度
-
- // 循环遍历2个字符串
- for (int i = 0; i<num1; i++)
- {
- for (int j = 0; j< num2; j++)
- {
- if (s1[i] == s2[j] && s1[i]!='\0') // 当字符相同时,给定子串长度为1
- {
- n1 = 1;
-
- // 循环判断相同字符数
- for (int k = 1; s1[i+k]==s2[j+k] && s1[i+k]!='\0'; k++)
- {
- n1++;
- }
-
- // 找到最长子串时,设置下标index
- if (n1>n2)
- {
- index = i;
- n2 = n1 ;
- }
- j+=n1-1;
- }
- }
- }
-
- if (n2!=0)
- {
- printf("最大公共子串:\n");
- for (int i = 0; i<n2; i++) {
- printf("%c",s1[index+i]);
- }
- }
- else
- {
- printf("没有公共子串!\n");
- }
- }
复制代码
功能没实现,大家有解决方案吗? |
|