php字符串查找函数zend_memnstr

Zend/zend_operators.h:
static inline char * zend_memnstr(char *haystack, char *needle, int needle_len, char *end)
{
     //字符首指针
     char *p = haystack;
     //最后一个字符
     char ne = needle[needle_len-1];
     //减小查询范围,判断needle_len应该小于end还算比较巧妙哦
     end -= needle_len;
     while (p <= end) {
        //在数组的前n个字节中搜索字符 memchr(p, *needle, (end-p+1)) 

        if ((p = (char *)memchr(p, *needle, (end-p+1))) && ne == p[needle_len-1]) {
            //如果找到首字节并且最后一个字节相同
            if (!memcmp(needle, p, needle_len-1)) {
                //对比找到啦那么返回首指针
                return p;
            }
        }
        if (p == NULL) {
            return NULL;
        }
        p++;
    }

    return NULL;
}

php函数strpos、explode都用到了此函数,具体代码可以查看:ext/standard/string.c

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-28 07:19:08

php字符串查找函数zend_memnstr的相关文章

c#中的字符串查找函数

indexOf()方法,查找某字符串在一个字符串内的位置,没有则返回-1string aa="abcdef";int a=aa.indexOf("bc");//a会等于1int b=aa.indexOf("a");//b会等于0int c=aa.indexOf("g");c会等于-1所以你只要判断返回出来的int值是不是小于0就知道这个字符串里有没有包含指定的另一个字符串 c#中的字符串查找函数,布布扣,bubuko.com

有意思的字符串查找函数

通过一段时间对字符串的了解,我发现了许多有意思的字符串函数,下面我们就以常见的字符串查找函数:strchr,strrchr,strstr,strrstr为例来模拟实现这些有意思的字符串查找函数. [strchr][strrchr] 查找一个字符,有所不同的是:strchr用于查找这个字符第一次出现的位置,strrchr用于查找这个字符最后一次出现的位置.下面我们就来打开MSDN来查找这两个字符查找函数的函数原型: char *strchr(const char *string,int c) ch

leetcode | Implement strStr() | 实现字符串查找函数

Implement strStr() : https://leetcode.com/problems/implement-strstr/ Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 如:haystack = "bcbcda"; needle = "bcd" 则 return 2 解析:字符串查找函数,

C/C++字符串查找函数 &lt;转&gt;

C/C++ string库(string.h)提供了几个字符串查找函数,如下: memchr 在指定内存里定位给定字符 strchr 在指定字符串里定位给定字符 strcspn 返回在字符串str1里找到字符串str2里的任意一个字符之前已查找的字符数量 strrchr 在字符串里定位给定字符最后一次出现的位置 strpbrk 在字符串str1里定位字符串str2里任意一个首次出现的字符 strspn 返回字符串str1从开始字符到第一个不在str2中的字符个数 strstr 在字符串str1中

字符串查找函数(BF)

//模拟字符串定位函数 // s: abcbbghi // t: ghi // 返回6 #include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string s, t; int len1, len2; int i, j; while(cin>>s) { cin>>t; len1=s.size(); len2=t.siz

sql instr()与LOCATE()字符串查找函数

由于今天一网站的子分类用到了关于sql instr()与LOCATE()字符串操作函数,下面做个笔记放下来,有需要的朋友可以参考一下. INSTR(str,substr)  返回字符串 str 中子字符串的第一个出现位置.这和LOCATE()的双参数形式相同,除非参数的顺序被颠倒.  代码如下 复制代码 mysql> SELECT INSTR('foobarbar', 'bar');         -> 4 mysql> SELECT INSTR('xbar', 'foobar');

orcal和sql server中的字符串查找函数

INSTR(C1,C2[,I[,J]]) [功能]在一个字符串中搜索指定的字符,返回发现指定的字符的位置; [说明]多字节符(汉字.全角符等),按1个字符计算 [参数] C1 被搜索的字符串 C2 希望搜索的字符串             I 搜索的开始位置,默认为1             J 第J次出现的位置,默认为1 [返回]数值 [示例] select instr('abcdefgc','c',1,2) from dual; 返回:8 CHARINDEX(C1,C2[,I]) [功能]在

Lua 字符串查找函数 string.find(s, pattern [, init [, plain]] )【转】

函数原型 string.find(s, pattern [, init [, plain]] ) s: 源字符串 pattern: 待搜索模式串 init: 可选, 起始位置 plain: 我没用过 ① 子串匹配: print(string.find("haha", 'ah') ) ----- 输出 2 3 注意: lua 里面数组或者字符串的字符, 其下标索引是从 1 开始, 不是 0 string.find 默认情况下返回两个值, 即查找到的子串的 起止下标, 如果不存在匹配返回

通用固定长度编码格式的字符串查找算法的实现

通用固定长度编码格式的字符串查找算法的实现 字符串的查找是数据库应用中必不可少的操作,而且每种数据库产品(ORACLE.DB2.SYBASE.MS SQL SERVER.MYSQL等等)也都提供了对应的字符串处理函数,比如DB2的LOCATE函数. 但在实际的工作中,还是会遇到一些特殊情况的处理,这使得直接使用字符串查找函数,得到的结果可能是错误的,比如本文中提到的固定长度编码格式的字符串的查找.值得注意的是,本文提出的算法可以稍加修改即移植到其它关系数据库系统或者前端开发工具中. 在实际数据库