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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

  2. #include <stdio.h>
  3. #include <string.h>

  4. int getMaxSonStr(char *s1, char *s2, int len1, int len2)

  5. {
  6.    
  7.     int index = 0;
  8.    
  9.     int m = 0 , n = 0;
  10.    
  11.     for (int i = 0; i < len1; i++)
  12.         
  13.     {
  14.         
  15.         for (int j = 0; j < len2; j++)
  16.             
  17.         {
  18.             if (s1[i] ==s2[j] & s1[i] != '\0')
  19.                
  20.             {
  21.                 m = 1;
  22.                
  23.                 for (int k = 0; s1[i+k] == s2[j+k] && s1[i+k]!='\0'; k++)
  24.                     
  25.                 {
  26.                     m++;
  27.                 }
  28.                 if(m > n)
  29.                 {
  30.                     index = i;

  31.                     n = m;
  32.                     
  33.                 }
  34.                
  35.             }
  36.             
  37.         }
  38.         
  39.     }
  40.    
  41.     if(m !=0)
  42.     {
  43.         printf("最长的公共子串:");
  44.         
  45.         for(int i = 0; i < m; i++)
  46.         {
  47.             printf("%c",s1[index]);
  48.         }
  49.     }
  50.     else
  51.         
  52.         printf("没有公共子串!\n");
  53.    
  54.     return 0;
  55. }

  56. int main()
  57. {
  58.     char str1[110];
  59.    
  60.     char str2[110];

  61.     printf("请输入第一个字符串:\n");
  62.    
  63.     gets(str1);
  64.    
  65.     printf("请输入第二个字符串:\n");
  66.    
  67.     gets(str2);
  68.    
  69.     int len_str1 = strlen("str1");
  70.    
  71.     int len_str2 = strlen("str2");
  72.    
  73.     getMaxSonStr(str1,str2,len_str1,len_str2);
  74.    
  75.     printf("\n");
  76.    
  77.     return 0;
  78.    
  79. }
复制代码

本帖被以下淘专辑推荐:

5 个回复

正序浏览
加油。。。。。
回复 使用道具 举报
zhanghuiye 发表于 2014-11-15 00:01
在你代码上进行的最小改动,看看吧
#include
#include

谢谢你  我找到问题了 :)
回复 使用道具 举报
在你代码上进行的最小改动,看看吧
#include <stdio.h>
#include <string.h>

int getMaxSonStr(char *s1, char *s2, int len1, int len2)

{
   
    int index = 0;
   
    int m = 0 , n = 0;
   
    for (int i = 0; i < len1; i++)
        
    {
        
        for (int j = 0; j < len2; j++)
            
        {
            if (s1[i] == s2[j] && s1[i] != '\0')
               
            {
                m = 1;
               
                for (int k = 1; (s1[i+k] == s2[j+k]) && s1[i+k]!='\0'; k++)
                    
                {
                    m++;
                }
                if(m > n)
                {
                    index = i;
                    
                    n = m;
                    
                }
               
            }
            
        }
        
    }
   
    if(n !=0)
    {
        printf("最长的公共子串:");
        
        for(int i = index; i < index+n; i++)
        {
            printf("%c",s1[i]);
        }
    }
    else
        
        printf("没有公共子串!\n");
   
    return 0;
}

int main()
{
    char str1[110];
   
    char str2[110];
   
    printf("请输入第一个字符串:\n");
   
    gets(str1);
   
    printf("请输入第二个字符串:\n");
   
    gets(str2);
   
    int len_str1 = strlen("str1");
   
    int len_str2 = strlen("str2");
   
    getMaxSonStr(str1,str2,len_str1,len_str2);
   
    printf("\n");
   
    return 0;
   
}
回复 使用道具 举报
zhanghuiye 发表于 2014-11-14 23:46
代码没注释啊,21行确认是&不是&&吗?

:L我去改去 看看行不行
回复 使用道具 举报
代码没注释啊,21行确认是&不是&&吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马