黑马程序员技术交流社区

标题: 各位前辈帮帮忙 用C语言基础知识 帮忙做道题 多加注释 方... [打印本页]

作者: 一步步往上爬    时间: 2016-1-4 14:39
标题: 各位前辈帮帮忙 用C语言基础知识 帮忙做道题 多加注释 方...
找出多个字符串中的最大公共字符串,如"nbitheimanb"和"itheia"的最大公共字符串是:"ithei"
作者: 赵边妖    时间: 2016-1-4 16:37
这应该是基础测试题吧
作者: 15223245    时间: 2016-1-4 18:41
  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. }
复制代码




作者: 一步步往上爬    时间: 2016-1-6 15:59
15223245 发表于 2016-1-4 18:41

谢谢 谢谢 很详细 如果有点注释 方便理解 就更完美了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2