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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

  2. #include <stdio.h>
  3. #include <string.h>
  4. int  main()
  5. {
  6.         
  7.     char *s1 = "nbitheimanbcf";
  8.     char *s2 = "itheia";
  9.    
  10.     void maxPublicString(char *s1,char *s2);
  11.     maxPublicString(s2,s1);
  12.    
  13.     return 0;
  14. }
  15. void maxPublicString(char *s1,char *s2)
  16. {
  17.     //分别求出s1,s2字符串的长度
  18.     int s1len = strlen(s1);
  19.     int s2len = strlen(s2);
  20.    
  21.     //记录相同元素下标,记录相同的元素个数
  22.     int index = 0 ,count = 0;
  23.    
  24.     //遍历s1
  25.     for(int i = 0; i<s1len ; i++)
  26.     {
  27.         
  28.         //遍历s2
  29.         for(int j = 0; j<s2len; j++)
  30.         {
  31.             
  32.          //取出s2的每一个元素s1进行比较,
  33.             if(s1[i]==s2[j])
  34.             {
  35.                 //如果有相同的元素,则同时都往后面移动
  36.                 for(int k = 1 ;s1[i+k]==s2[j+k] && s2[j+k]!='\0' && s1[i+k]!='\0' ;k++)
  37.                 {
  38.                     //选出最大公共字符串
  39.                     if(k>count)
  40.                     {
  41.                         //记录最大公共字符串长度的下标
  42.                         count =k;
  43.                         
  44.                         //记录最大公共字符串长度的个数
  45.                         index = i;
  46.                         
  47.                     }
  48.                 }
  49.                
  50.                
  51.             }

  52.         }
  53.         
  54.         
  55.     }
  56.     if(count == 0)
  57.     {
  58.         printf("没有找到最大公共子串\n");
  59.     }
  60.     else
  61.     {
  62.         printf("最长公共字串是:");
  63.       
  64.         for(int i = 0 ; i<=count; i++)
  65.         {
  66.             printf("%c",s1[index+i]);
  67.         }
  68.     }
  69.     printf("\n");
  70.       
  71. }
复制代码

0 个回复

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