- /*
- 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");
- }
复制代码
|
|