题目:找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。(C语言)
感觉自己的这种方法挺麻烦,以下是代码,求交流!
- <P> #include <stdio.h>
- #include <string.h>
- char res1[100] = "", res2[100] = "";</P>
- <P>char *fun(char * str1, char * str2)
- {
- int i,j,k;
- int point = 1;//用于标记公共字符串的存储位置
- for(i=0;i<strlen(str1);i++)
- {
- k = i;
- for(j=0;j<strlen(str2);j++)
- {
- if(str1[k] == str2[j])
- {
- if(point == 1)
- {
- strncat(res1, &str1[k], 1);
- k++;
- }
- else
- {
- strncat(res2, &str1[k], 1);
- k++;
- }
- }
- else
- {
- if(strlen(res1)<strlen(res2))
- {
- memset(res1,0,100);
- point = 1;
- }
- else
- {
- memset(res2,0,100);
- point = 2;
- }
- }
- }
- if(strlen(res1)<strlen(res2))
- {
- memset(res1,0,100);
- point = 1;
- }
- else
- {
- memset(res2,0,100);
- point = 2;
- }
- }
-
- if((strlen(res1)==strlen(res2))&&(!strlen(res1)))
- {
- printf("无公共字符串\n");
- return NULL;
- }
- if(strlen(res1)<strlen(res2))
- return res2;
- else
- return res1;
- }
- int main()
- {
- char string1[100] = "", string2[100] = "", string3[100] = "";
- printf("请输入三个字符串\n");//仅以三个字符串代表多个字符串
- scanf("%s %s %s", string1, string2, string3);
- char *result;
- result = fun(string1, string2);
- if(result != NULL)
- {
- result = fun(result, string3);
- if(result!=NULL)
- printf("%s\n", result);
- }
- return 0;
- }</P>
复制代码
|
|