A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /**
  2. *10.找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。(C语言)
  3. */

  4. #import <Foundation/Foundation.h>

  5. int main(int argc, const char * argv[])
  6. {
  7.    
  8.     //1.定义并初始化需要比较的两个字符串
  9.     char string1[]="nbitheimanb";
  10.     char string2[]="itheia";
  11.    
  12.     //2.定义两个变量存储两个字符串的长度值
  13.     unsigned long length1 = strlen(string1);
  14.     unsigned long length2 = strlen(string2);
  15.    
  16.     //3.p为比较中存贮公共字符串的头地址
  17.     char *p;
  18.     //3.1maxp存贮最大公共字符串的头地址
  19.     char *maxp=NULL;
  20.    
  21.     //4.count为比较中公共字符串的字数
  22.     int count =0;
  23.     //4.1max存贮最大公共字符串的个数
  24.     int max = 0;
  25.    
  26.     //5.循环遍历两个字符串第一个相同的字符
  27.     for(int i = 0;i < length1;i++)
  28.     {
  29.         
  30.         
  31.         for(int j = 0;j < length2;j++)
  32.         {
  33.             //5.1初始化公共字符串长度为0
  34.             count = 0;
  35.             
  36.             //5.2发现第一个相同的字符
  37.             if(string1[i] == string2[j])
  38.             {
  39.                 //5.2.1将第一个相同字符的地址传给中间指针变量p
  40.                 p=&string1[i];
  41.                 //5.2.2开始公共字符串计数 满足条件字符相等 而且没有超出字符串的大小
  42.                 while(string1[i] == string2[j] && i <length1 && j < length2)
  43.                 {
  44.                     //5.2.3公共字符串大小计数加1
  45.                     count++;
  46.                     
  47.                     //5.2.4下一位需要比较的字符
  48.                     i++;
  49.                     j++;
  50.                     
  51.                 }
  52.                
  53.                 //5.3完成一组公共字符串的搜索,查看是否比存贮的最大一组大 若大 则替换
  54.                 if(count > max)
  55.                 {
  56.                     //5.3.1替换最大公共字符串的字数
  57.                     max = count;
  58.                     //5.3.2替换最大公共字符串的起始地址
  59.                     maxp = p;
  60.                 }
  61.             }
  62.         }
  63.         
  64.     }
  65.     //6.循环打印 最大公共字符串的起始地址开始 后面max个字符
  66.     for(int i = 0;i < max;i++)
  67.     {
  68.         printf("%c",*(maxp+i));
  69.     }
  70.     //6.1为了美观 打一个换行
  71.     printf("\n");
  72.     //6.2打印最大公共字符串的个数
  73.     printf("字符串个数为 %d\n",max);
  74.    
  75.     return 0;
  76. }
复制代码

本帖被以下淘专辑推荐:

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马