黑马程序员技术交流社区
标题:
找出多个字符串中的最大公共子字符串,如“nbitheimanb”和...
[打印本页]
作者:
huh
时间:
2015-12-27 20:08
标题:
找出多个字符串中的最大公共子字符串,如“nbitheimanb”和...
/*
main.m
找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。(C语言)
分析:
公共子字符串:连续相同的字符串
最大的公共子字符串:连续相同的字符串中长度最长得!
1)拿某个字符串跟另一个字符串进行比较,先找到相同的字符,如果相同,在比较后面一个字符,如果相同,那它就是相同的字符串了!
2)如何取得最大的字符串?
确认它是相同字符串时,记录字符串中字符的个数!(从1开始),下次相同字符循环时,相同字符个数>原有个数,那现有个数为最大字符串!
3)记录最大字符串的下标,最大字符下标 + 字符个数 = 最大字符串!
这个可以用OC来写,下次试试!
*/
//#import <Foundation/Foundation.h>
#include <stdio.h>
#include <string.h>
int main(){
char * s1 = "nbitheimanb";
char * s2 = "itheia";
void maxString(char* s1, char* s2);
maxString(s1, s2);
return 0 ;
}
//求出相同字符串中个数最多的字符
void maxString(char* s1, char* s2){
//求出s1,s2的长度
int s1len = strlen(s1);
int s2len = strlen(s2);
int count = 0;//相同字符串中字符的个数
int index = 0;//相同字符串中最大的字符的首下标
//将字符串中的每个字符与另一个字符串中每个字符进行比较
for (int i = 0 ; i<=s1len; i++) {
for (int j = 0; j<=s2len;j++) {
if(s1[i] == s2[j]){//对比两个字符是否相同
//再次判断两个字符后面的字符是否相同,如相同则为字符串
for (int k = 1; s1[i+k]==s2[j+k] && s1[i+k]!='\0' && s2[j+k]!='\0'; k++) {
//判断相同字符的个数,如果大于上次的个数,则将现有的个数替换原有得
//就是求出了,个数最多的相同字符串
if (k>count) {
count = k;//更改原有相同字符的个数
index = i;//相同字符个数最多的首字符的下标
}
}
}
}
}
if (count == 0) {
printf("没有相同的字符");
}else{
void printString(char *s1,int index,int count);
printString(s1, index, count);
}
}
//截取字符串中的字符,并打印
void printString(char *s1,int index,int count){
//打印出相同个数最多的字符串
for (int i = 0; i<=count; i++) {
printf("%c",s1[index+i]);
}
printf("\n");
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2