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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

3 个回复

正序浏览

谢谢 谢谢 很详细 如果有点注释 方便理解 就更完美了
回复 使用道具 举报
  1. #include "stdio.h"
  2. #include "string.h"
  3. #include "stdlib.h"

  4. void getCommon(char str1[],char str2[],char * str3);
  5. int stringLength(char * str);

  6. void main(){
  7.     char str1[50];
  8.     char str2[50];
  9.     char str3[50];
  10.     printf("请输入第一个字符串\n");
  11.     gets(str1);
  12.         printf("请输入第二个字符串\n");
  13.     gets(str2);
  14.     getCommon(str1,str2,str3);
  15.     printf("最大公共是:%s\n",str3);
  16.     // printf("%d\n",stringLength(str2));
  17. }
  18. int stringLength(char * str){
  19.     int len = 0;
  20.     while(*str != '\0'){
  21.         len++;
  22.         str++;
  23.     }
  24.     return len;
  25. }
  26. void getCommon(char str1[],char str2[],char * str3){
  27.     int len1,len2;
  28.     int i,j,k;
  29.     int max=0;
  30.     int start = -1;

  31.     len1 = stringLength(str1);
  32.     len2 = stringLength(str2);
  33.     for(i = 0; i < len1; i++){
  34.         for(j = 0; j < len2; j++){
  35.             if(str1[i] == str2[j]){
  36.                 for(k = 0; (str1[i+k] == str2[j+k] && str1[i+k] != '\0'); k++);
  37.                 if(max < k){
  38.                     max = k;
  39.                     start = i;
  40.                 }
  41.             }
  42.         }
  43.     }
  44.    
  45.     if(start == -1){
  46.         str3[0] = '\0';;
  47.     }else{
  48.         memcpy(str3,&str1[start],max);
  49.         str3[max] = '\0';
  50.     }
  51. }
复制代码



回复 使用道具 举报
这应该是基础测试题吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马