黑马程序员技术交流社区
标题:
入学基本测试题 找出多个字符串中的最大公共子字符串
[打印本页]
作者:
麻木
时间:
2015-4-23 13:21
标题:
入学基本测试题 找出多个字符串中的最大公共子字符串
/**
*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;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2