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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 恋梦 中级黑马   /  2015-3-20 00:22  /  1492 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 恋梦 于 2015-3-20 00:34 编辑


这里无法奖励,现已转到提问版块。

12 个回复

倒序浏览
#include <stdio.h> #include <string.h>  void checknext(char *s1, char *s2, int i, int j, int *m); // 声明 void getPublicStr(char *str1, char *str2); // 声明  int  main() {          char *s1 = "nbitheimanb";     char *s2 = "itheia";               getPublicStr(s1,s2);          return 0; }  void checknext(char *s1, char *s2, int i, int j, int *m) {     if(s2[i+1]==s1[j+1]&&s2[i+1]!='\0'&&s1[j+1]!='\0')     {         (*m)++; // 通过指针给长度+1         checknext(s1,s2,i+1,j+1,m); //递归查找下一个相同的字符     } }  void getPublicStr(char *str1, char *str2) {     int max = 0, start = 0, length=0; // 定义最大长度,开始下标,匹配长度     char *longstring;char *shortstring; // 定义较长字符串和较短字符串               if(strlen(str1)<strlen(str2))     // 将较长字符串赋给longstring,短字符串赋给shortstring     {         longstring = str2; shortstring = str1;     }     else     {         longstring = str1; shortstring = str2;     }          // 遍历     for(int i=0;i<strlen(longstring);i++)     {         for(int j=0;j<strlen(shortstring);j++)         {             //取出shortstring的每一个元素与longstring进行比较             if(longstring[i]==shortstring[j])             {                 length=1;                 checknext(longstring,shortstring,i,j,&length); //  首次执行完后获得第一个匹配字符串长度             }                          if(length>max)             {max=length; start=i;} //如果长度大于最大长度,则保存最大值         }     }          if(max == 0)     {         printf("没有找到最大公共字符串\n");     }     else     {         printf("最大公共字符串是:");         for(int k=start;k<(max+start);k++)         {             printf("%c",longstring[k]); // 循环输出最大公共字符串         }         printf("\n");     } }

点评

请以代码的形式发出,这种我实在看不下去。  发表于 2015-3-20 00:30
回复 使用道具 举报
我自己写的  你可以运行一下
回复 使用道具 举报
本帖最后由 恋梦 于 2015-3-20 00:30 编辑
wukai 发表于 2015-3-20 00:25
#include  #include   void checknext(char *s1, char *s2, int i, int j, int *m); // 声明 void getPubli ...

你能不能点下面那个插入代码,这谁看的下去呀。
回复 使用道具 举报
wukai 发表于 2015-3-20 00:26
我自己写的  你可以运行一下

最下面的那插入代码,请以代码的形式发出
回复 使用道具 举报
我就是用text 写的  你粘贴运行一下么
回复 使用道具 举报
wukai 中级黑马 2015-3-20 00:36:05
7#
  1. #include <stdio.h>
  2. #include <string.h>

  3. void checknext(char *s1, char *s2, int i, int j, int *m); // 声明
  4. void getPublicStr(char *str1, char *str2); // 声明

  5. int  main()
  6. {
  7.    
  8.     char *s1 = "nbitheimanb";
  9.     char *s2 = "itheia";
  10.    
  11.    
  12.     getPublicStr(s1,s2);
  13.    
  14.     return 0;
  15. }

  16. void checknext(char *s1, char *s2, int i, int j, int *m)
  17. {
  18.     if(s2[i+1]==s1[j+1]&&s2[i+1]!='\0'&&s1[j+1]!='\0')
  19.     {
  20.         (*m)++; // 通过指针给长度+1
  21.         checknext(s1,s2,i+1,j+1,m); //递归查找下一个相同的字符
  22.     }
  23. }

  24. void getPublicStr(char *str1, char *str2)
  25. {
  26.     int max = 0, start = 0, length=0; // 定义最大长度,开始下标,匹配长度
  27.     char *longstring;char *shortstring; // 定义较长字符串和较短字符串
  28.    
  29.    
  30.     if(strlen(str1)<strlen(str2))     // 将较长字符串赋给longstring,短字符串赋给shortstring
  31.     {
  32.         longstring = str2; shortstring = str1;
  33.     }
  34.     else
  35.     {
  36.         longstring = str1; shortstring = str2;
  37.     }
  38.    
  39.     // 遍历
  40.     for(int i=0;i<strlen(longstring);i++)
  41.     {
  42.         for(int j=0;j<strlen(shortstring);j++)
  43.         {
  44.             //取出shortstring的每一个元素与longstring进行比较
  45.             if(longstring[i]==shortstring[j])
  46.             {
  47.                 length=1;
  48.                 checknext(longstring,shortstring,i,j,&length); //  首次执行完后获得第一个匹配字符串长度
  49.             }
  50.             
  51.             if(length>max)
  52.             {max=length; start=i;} //如果长度大于最大长度,则保存最大值
  53.         }
  54.     }
  55.    
  56.     if(max == 0)
  57.     {
  58.         printf("没有找到最大公共字符串\n");
  59.     }
  60.     else
  61.     {
  62.         printf("最大公共字符串是:");
  63.         for(int k=start;k<(max+start);k++)
  64.         {
  65.             printf("%c",longstring[k]); // 循环输出最大公共字符串
  66.         }
  67.         printf("\n");
  68.     }
  69. }
复制代码
回复 使用道具 举报
wukai 中级黑马 2015-3-20 00:37:16
8#
什么意思啊  怎么无法奖励啊
回复 使用道具 举报
wukai 中级黑马 2015-3-20 00:39:00
9#
恋梦 发表于 2015-3-20 00:27
你能不能点下面那个插入代码,这谁看的下去呀。

不会玩这个  见笑了
回复 使用道具 举报
wukai 发表于 2015-3-20 00:37
什么意思啊  怎么无法奖励啊

咱不是版主没权限,不过明天可以请示版主,让版主奖励。
回复 使用道具 举报
wukai 中级黑马 2015-3-20 00:42:18
11#
恋梦 发表于 2015-3-20 00:40
咱不是版主没权限,不过明天可以请示版主,让版主奖励。

无所谓  我叫吴开  交个朋友  深夜认识不容易
回复 使用道具 举报
wukai 发表于 2015-3-20 00:42
无所谓  我叫吴开  交个朋友  深夜认识不容易

http://bbs.itheima.com/forum.php ... p;page=1#pid1272762
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马