C语言字符串匹配函数建议收藏

C语言字符串匹配函数,保存有需要时可以用:1#include2#include3#include4#include5#include67/*8pattern:9pos

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

C语言字符串匹配函数建议收藏此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

C语言字符串匹配函数,保存有需要时可以用:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <assert.h>
  5 #include <time.h>
  6 
  7 /*
  8 pattern:
  9 pos:
 10 */
 11 
 12 static int badShift[256];
 13 
 14 
 15 static int goodPostfixLastPos(const char *pattern,int pos)
 16 {
 17 #define _break(flag) if(flag){ break;}
 18 
 19     int flag = 0;
 20     int len = strlen(pattern);
 21     int postFix_len = len - pos;
 22     int postFix_position = pos;
 23     int initStart = pos - postFix_len;
 24     int last_start = 0;
 25     while(postFix_len)
 26     {
 27         last_start = (postFix_position == pos) ?initStart:0;
 28         int postFix_start = postFix_position;
 29         for(;last_start>=0 && postFix_start<len;last_start++,postFix_start++)
 30         {
 31             flag = (pattern[last_start] == pattern[postFix_start]);
 32             _break(!flag);
 33 
 34         }
 35 
 36         _break(flag);
 37         if(initStart >= 0)
 38         {
 39             initStart--;
 40         }
 41         else
 42         {
 43             postFix_position++;
 44             postFix_len--;
 45         }
 46     }
 47 
 48     return flag?last_start-1:-1;
 49 }
 50 
 51 static int *calc_goodPostfixShift(const char *pattern,int *goodShift)
 52 {
 53     int len = strlen(pattern);
 54     for(int i=0;i<len;i++)
 55     {
 56         goodShift[i] = len - goodPostfixLastPos(pattern,i) - 1;
 57     }
 58 
 59     return goodShift;
 60 }
 61 
 62 static int *clac_badcharShift(const char *ptrn)
 63 {
 64     int i;
 65     int pLen = strlen(ptrn);
 66 
 67     for(i = 0; i < 256; i++)
 68     {
 69         *(badShift+i) = pLen;
 70     }
 71 
 72     while(pLen != 0)
 73     {
 74         *(badShift+(unsigned char)*ptrn++) = --pLen;
 75     }
 76 
 77     return badShift;
 78 }
 79 
 80 int BMSearch(const char *str,const char *pattern)
 81 {
 82     
 83     int goodShift[strlen(pattern)];
 84     int len1 = strlen(str);
 85     int len2 = strlen(pattern);
 86 
 87     clac_badcharShift(pattern);
 88     calc_goodPostfixShift(pattern,goodShift);
 89     for(int i=len2 - 1;i<len1;)
 90     {
 91         int start = i;
 92         int pos_pattern = len2 - 1;
 93         for(;pos_pattern>=0;pos_pattern--,start--)
 94         {
 95             if(str[start] != pattern[pos_pattern])
 96             {
 97                 break;
 98             }
 99         }
100         if(pos_pattern < 0)
101         {
102             return start + 1;
103         }
104 
105         if(pos_pattern == (len2 - 1))
106         {
107             i += badShift[str[start]];
108         }
109         else
110         {
111             i += goodShift[pos_pattern + 1];
112         }
113     }
114 
115     return -1;
116 }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120792.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PMF 培训[通俗易懂]

    PMF 培训[通俗易懂]IBM有一些很有名的培训,也很有效,真的是有立竿见影的效果.过去很长时间之后,可能不记得培训的那些细节,但是培训中传达的工作方式,能给你很大的影响.进公司后3个月的时候接受了第一个,有关customerfacing的,其实是为你提供了一个商务沟通的基本模式,现在培训的内容忘记了,但是这个模式还记得:调查-承诺-执行-反馈.一个有效的商务沟通,哪怕是和客户的一个电话,都需要艺…

  • 数据库的概念模型,联系,E-R模型的设计方法「建议收藏」

    概念模型的基本概念:表示概念模型的最常用模型是实体-联系模型(Entity-RelationshipModel,简称E-R模型)E-R模型中,数据的结构被表示为“实体-联系”图。(E-R图)图中有三个主要的元素类型:实体集,属性和联系。联系:两个实体集之间的联系可归纳为以下三类:1)一对一联系(1:1) 2)一对多联系(1:n)和多对一联系(n:1)3)多对多联…

  • 网络爬虫原理解析「建议收藏」

    1、网络爬虫原理网络爬虫指按照一定的规则(模拟人工登录网页的方式),自动抓取网络上的程序。简单的说,就是讲你上网所看到页面上的内容获取下来,并进行存储。网络爬虫的爬行策略分为深度优先和广度优先。如下图是深度优先的一种遍历方式是A到B到D到E到C到F(ABDECF)而宽度优先的遍历方式ABCDEF。2、写网络爬虫的原因(1)互联网中的数据量大,我们不能人工的去收集数据,这样会很浪费时间与金钱…

  • 中国it人物_计算机界的名人

    中国it人物_计算机界的名人2006.9.2 07:19早起者并不一定收获最多,但成功者一定是方向对,善管理风险的人。  不管是寿国梁、曹军这样的无奈者,还是张树新、王峻涛这样的迷失者,其先发优势都已消失殆净。  从“先驱”到“先烈”的转变,折射出的是市场的易变性和持续成功的“无规律性”。这种“无规律性”既表现在你所需要坚持的东西上,也表现在日常的经营管理中。  8848

  • app怎么模拟弱网测试(应用最多的工具箱app)

    1.弱网模拟工具1.1. iOS平台,通过自带的开发者选项》NetworkLinkCondition,即可简单的模拟各种速度的网络情况:1.2通过抓包工具,设置延迟,进行模拟不同的网络情况,比如常用的fiddler,charles:1.2.1fiddler操作:自定义延迟 》开启网络模拟即可,如图:1.2.2Charles操作:

  • abstract修改方法

    abstract修改方法

    2021年12月31日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号