- /**
- *10.找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。(C语言)
- */
- #import <Foundation/Foundation.h>
- int main(int argc, const char * argv[])
- {
-
- //1.定义并初始化需要比较的两个字符串
- char string1[]="nbitheimanb";
- char string2[]="itheia";
-
- //2.定义两个变量存储两个字符串的长度值
- unsigned long length1 = strlen(string1);
- unsigned long length2 = strlen(string2);
-
- //3.p为比较中存贮公共字符串的头地址
- char *p;
- //3.1maxp存贮最大公共字符串的头地址
- char *maxp=NULL;
-
- //4.count为比较中公共字符串的字数
- int count =0;
- //4.1max存贮最大公共字符串的个数
- int max = 0;
-
- //5.循环遍历两个字符串第一个相同的字符
- for(int i = 0;i < length1;i++)
- {
-
-
- for(int j = 0;j < length2;j++)
- {
- //5.1初始化公共字符串长度为0
- count = 0;
-
- //5.2发现第一个相同的字符
- if(string1[i] == string2[j])
- {
- //5.2.1将第一个相同字符的地址传给中间指针变量p
- p=&string1[i];
- //5.2.2开始公共字符串计数 满足条件字符相等 而且没有超出字符串的大小
- while(string1[i] == string2[j] && i <length1 && j < length2)
- {
- //5.2.3公共字符串大小计数加1
- count++;
-
- //5.2.4下一位需要比较的字符
- i++;
- j++;
-
- }
-
- //5.3完成一组公共字符串的搜索,查看是否比存贮的最大一组大 若大 则替换
- if(count > max)
- {
- //5.3.1替换最大公共字符串的字数
- max = count;
- //5.3.2替换最大公共字符串的起始地址
- maxp = p;
- }
- }
- }
-
- }
- //6.循环打印 最大公共字符串的起始地址开始 后面max个字符
- for(int i = 0;i < max;i++)
- {
- printf("%c",*(maxp+i));
- }
- //6.1为了美观 打一个换行
- printf("\n");
- //6.2打印最大公共字符串的个数
- printf("字符串个数为 %d\n",max);
-
- return 0;
- }
复制代码 |
|