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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 桑雅 中级黑马   /  2015-1-3 22:48  /  1038 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。

2 个回复

倒序浏览
#include <stdio.h>  
#include <string.h>  
  
void same_str( char *str1, char const *str2, char const *str3 );  
  
void main()  
{  
    char str1[10],str2[30],str3[30];  
      
    gets( str2 );  
    gets( str3 );  
  
    same_str( str1, str2, str3 );  
  
    printf("/n%s/n",str1);  
}  
  
void same_str( char *str1, char const *str2, char const *str3 )  
{  
    int i,j,k,len,max=0,n=0,len2,len3;  
    char *temp;  
  
    if ( strlen( str2 ) < strlen( str3 ) ) /*为了保证外层循环的那个字符串总是最长的*/  
    {  
        temp = str2;  
        str2 = str3;  
        str3 = temp;  
    }  
  
  
    for ( i=0; *(str2+i)!='/0'; i++ )  
    {  
        len = 0;  
        for ( j=0,k=i; *(str3+j)!='/0'&&*(str2+k)!='/0'; j++,k++ )  
        {  
            if ( *(str2+k) == *(str3+j) )  
            {  
                len++;            
            }  
            else  /*当下一个字符不相同时,要避免相隔相同的字母len累加*/  
            {  
                if ( max < len )  
                {  
                    max = len;  
                    n = k-len;  
                }  
                len = 0;  
            }  
        }  
        if ( max < len )  /*当一个字符串的末尾字符串相等时*/  
        {  
            max = len;  
            n = k-len;  
            len = 0;  
        }  
  
    }         
         
  
    for ( j=0; j<max; j++,n++ )  
        *str1++ = *(str2+n);  
    *str1 = '/0';  
}  
回复 使用道具 举报
这是考试题么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马