开启左侧

找最长子串

二维码 [复制链接]
217 0
找source和chars中最大的子串,
    如:source字符串为“ABCDEFG” chars字符串为"ABTCDQEFGK",
    那么函数应该返回最大子串"EFG",
    如果字符串中存在相等的长度的子串,返回第一个相等长度的子串即可。
    如:source字符串为“ABCDEFG” chars字符串为"ABTCDQEFK",返回AB即可
    同样的道理,如果source和chars只要有一个为空串,返回NULL,没有匹配串也返回NULL..(此题为曾经我进现在公司的面试题)

函数原型如下:
char *find_longest_chars(char const *source, char const *chars);

1、Makefile包含功能如下
        (1)make
                编译debug版本和release版本
        (2)make debug
                仅编译debug版本
        (3)make release
                仅编译release版本
        (4)make tar
                将当前目录下所有文件打包
2、程序功能
        找source和chars中最大的子串,
        如:source字符串为“ABCDEFG” chars字符串为"ABTCDQEFGK",
        那么函数应该返回最大子串"EFG",
        如果字符串中存在相等的长度的子串,返回第一个相等长度的子串即可。
        如:source字符串为“ABCDEFG” chars字符串为"ABTCDQEFK",返回AB即可
        同样的道理,如果source和chars只要有一个为空串,返回NULL,没有匹配串也返回NULL.

参考答案:

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define MAX_LENGHT 256
  4. #ifdef DEBUG
  5. #define myprintf(...) printf(__VA_ARGS__)
  6. #else
  7. #define myprintf(...) ;
  8. #endif

  9. /*Get the longest chars between source and cp*/
  10. size_t find_longest_length(const char *source, const char *cp)
  11. {
  12.         size_t len = 0;

  13.         while( *(++source) == *(++cp) )
  14.                 len++;
  15.         return len;
  16. }
  17. /*similar to strncpy*/
  18. char *mystrncpy(char *pfind, const char *cp, size_t n)
  19. {
  20.         int i;
  21.         char *ptmp = pfind;

  22.         for(i=0; (*ptmp++ = *cp++) != '\0' && i < n-1; i++);

  23.         return pfind;
  24. }

  25. char *find_char(const char *source, const char *chars)
  26. {
  27.         static size_t max_len = 0;
  28.         int len = 0;
  29.         char *cp;
  30.         static char *pfind= NULL;


  31.         if( source != NULL && chars != NULL )
  32.         {
  33.                 if(NULL == pfind)
  34.                 {
  35.                         pfind = (char *)malloc(MAX_LENGHT);
  36.                         if( NULL == pfind )
  37.                         {
  38.                                 fprintf(stderr,"out of memory!\n");
  39.                                 return NULL;
  40.                         }
  41.                 }
  42.                 for( ; *source != '\0'; source++ )
  43.                 {
  44.                         for( cp = chars; *cp!= '\0'; cp++ )
  45.                         {
  46.                                 if( *source == *cp )
  47.                                 {
  48.                                         len = find_longest_length(source,cp);

  49.                                         myprintf("len = %d,max_len = %d\n",len,max_len);
  50.                                         if(len + 1 > max_len)
  51.                                         {
  52.                                                 max_len = len + 1;
  53.                                                 mystrncpy(pfind, cp, max_len);
  54.                                                 myprintf("pfind = %s\n",pfind);
  55.                                         }
  56.                                         myprintf("source = %s,cp = %s\n",source,cp);
  57.                                         return find_char(source + max_len, cp + max_len);
  58.                                 }
  59.                         }
  60.                 }
  61.         }

  62.         return pfind;
  63. }
  64. int main(int argc,char *argv[])
  65. {
  66.         char *cp;

  67.         cp = find_char(argv[1],argv[2]);

  68.         if(cp == NULL)
  69.         {
  70.                 printf("Not found chars in source!\n");
  71.                 return 0;
  72.         }
  73.         else
  74.         {
  75.                 printf("The longest string is:[%s]\n",cp);
  76.                 if(cp)
  77.                         free(cp);
  78.                 cp = NULL;

  79.         }
  80.         return 0;
  81. }
复制代码


赞助本站





上一篇:第一个最长子串
下一篇:输出指定图形
学会善用【论坛搜索】功能,很多你要寻找的答案就在这里面;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

发新帖 回复

104

主题

104

帖子

233

街币
更多

精彩推荐

爱好街资源共享区文件解压密码
爱好街资源共享区文件解压密码
因本站分享的文件实在太多,目前收集整理已经接近4T,所以有些文
新人报到专用贴
新人报到专用贴
==新人报道格式(选填)== 【我的昵称】: 【我的性别
易辅客栈VIP教程之从零学辅助系列(大漠主讲)
易辅客栈VIP教程之从零学辅助
学易语言的都知道大漠,而且这套教材是零基础入门,非常棒的
独立团VIP教程第1-7版全套打包下载(含课件源码工具等)
独立团VIP教程第1-7版全套打包
独立团第1版易语言教程 独立团第一版1易语言入门 1-1-1外
挂茶馆全套教程(含课件,源码,工具等)完整版下载
挂茶馆全套教程(含课件,源码,
一切从零开始教程目录 第一部(游戏为征途,随便
爱好街链接地址失效有奖报错
爱好街链接地址失效有奖报错
我们的成长离不开大家的支持!! 各位爱好街的会员:

免责声明:
在爱好街发布的文章与主题属会员个人意见,与本站立场无关,文章内容由作者与爱好街享有相关版权,如需转载请注明出处或取得会员与本站的许可,否则本站将追究相应的法律责任,如部分内容有侵犯任何版权问题,请立即告知本站,本站将及时予以删除并致以最深的歉意。另外不得将本站内容用于商业或者非法用途,否则,一切后果请用户自负。

Mail To:MasTer@AiHaiJie.Com

快速回复
快速回复 返回顶部 返回列表