开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2134|回复: 8
收起左侧

[支持库源码] KMP分享

[复制链接]
结帖率:25% (5/20)
发表于 2021-8-3 01:46:16 | 显示全部楼层 |阅读模式   江西省九江市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
  1. void kmp_init(const char *s, int *prefix, size_t size) {
  2.     prefix[0] = 0;
  3.     for (size_t i = 1; i < size; ++i) {
  4.         if (s[i] == s[prefix[i - 1]])
  5.             prefix[i] = prefix[i - 1] + 1;
  6.         else {
  7.             int j = i - 1;
  8.             while (prefix[j] > 0 && s[prefix[j]] != s[i])
  9.                 j = prefix[j] - 1;
  10.             if (prefix[j] > 0)
  11.                 prefix[i] = prefix[j] + 1;
  12.             else {
  13.                 prefix[i] = (s[i] == s[0]);
  14.             }
  15.         }
  16.     }
  17. }

  18. int strStr(const char *src, const char *dest) {
  19.     if (!dest || !src)
  20.         return -1;
  21.     if (!*dest)
  22.         return 0;
  23.     size_t size = strlen(dest);
  24.     int *prefix = malloc(sizeof(int) * size);
  25.     kmp_init(dest, prefix, size);
  26.     size_t i, j;
  27.     for (i = j = 0; src[i] && j < size; ++i) {
  28.         if (dest[j] == src[i]) {
  29.             ++j;
  30.         }
  31.         else if (j) {
  32.             while (prefix[j - 1] > 0 && dest[prefix[j - 1]] != src[i])
  33.                 j = prefix[j - 1];
  34.             if (prefix[j - 1] > 0) {
  35.                 j = prefix[j - 1] + 1;
  36.             }
  37.             else {
  38.                 j = (dest[0] == src[i]);
  39.             }
  40.         }
  41.     }
  42.     free(prefix);
  43.     if (j < size)
  44.         return -1;
  45.     return i - size;
  46. }
复制代码



签到天数: 26 天

发表于 2022-12-20 17:00:54 | 显示全部楼层   陕西省西安市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 15 天

发表于 2022-11-11 15:31:49 | 显示全部楼层   湖北省武汉市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:81% (26/32)

签到天数: 1 天

发表于 2022-1-24 00:01:01 | 显示全部楼层   上海市上海市
我读书少,不要骗我
回复 支持 反对

使用道具 举报

结帖率:96% (47/49)

签到天数: 12 天

发表于 2021-8-5 01:04:58 | 显示全部楼层   上海市上海市
这么厉害!必须给个红包鼓励下~
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 27 天

发表于 2021-8-3 23:20:58 | 显示全部楼层   江西省赣州市
这个寻找是用C函数写的那里面是否越过\0也就结束符?易语言的寻找字节集可以越过去!我看了微软网站的C函数都是以结束符在判断终止寻找的!一旦字符串中间有结束符后边就寻找不到了
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 27 天

发表于 2021-8-3 10:18:47 | 显示全部楼层   江西省南昌市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:17% (1/6)
发表于 2021-8-3 09:24:46 | 显示全部楼层   浙江省杭州市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 6 天

发表于 2021-8-3 08:47:26 | 显示全部楼层   江苏省淮安市
易论坛,你给我来个C?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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