zoukankan      html  css  js  c++  java
  • memstr Dustfly的专栏 博客频道 CSDN.NET

    memstr - Dustfly的专栏 - 博客频道 - CSDN.NET

    memstr

    1009人阅读 评论(0) 收藏 举报

    好长时间没有写过Blog了,呵呵

    在glibc里面有memchr,却没有memstr,发个memstr出来:

    /* Return the offset of one string within another.
       Copyright (C) 1994,1996,1997,2000,2001,2003 Free Software Foundation, Inc.
       This file is part of the GNU C Library.

       The GNU C Library is free software; you can redistribute it and/or
       modify it under the terms of the GNU Lesser General Public
       License as published by the Free Software Foundation; either
       version 2.1 of the License, or (at your option) any later version.

       The GNU C Library is distributed in the hope that it will be useful,
       but WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       Lesser General Public License for more details.

       You should have received a copy of the GNU Lesser General Public
       License along with the GNU C Library; if not, write to the Free
       Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
       02111-1307 USA.  */


    #if HAVE_CONFIG_H
    # include <config.h>
    #endif

    #if defined _LIBC || defined HAVE_STRING_H
    # include <string.h>
    #endif

    typedef unsigned chartype;

    #undef memstr

    /*
     memstr -- search string in memory range, by sunline lisunlin0@yahoo.com.cn
     memstr rewrite from strstr in glibc, which implement by
     Stephen R. van den Berg, berg@pool.informatik.rwth-aachen.de */
    char *
    memstr (phaystack, pend, pneedle)
         const char *phaystack;
        const char *pend;
         const char *pneedle;
    {
      const unsigned char *haystack, *needle, *end;
      chartype b;
      const unsigned char *rneedle;

      haystack = (const unsigned char *) phaystack;
      end = pend - 1;

      if ((b = *(needle = (const unsigned char *) pneedle)))
        {
          chartype c;
          haystack--;        /* possible ANSI violation */

          {
        do
          if (++haystack >= end)
            goto ret0;
        while (*haystack != b);
          }

          if (!(c = *++needle))
        goto foundneedle;
          ++needle;
          goto jin;

          for (;;)
        {
          {
            chartype a;
            if (0)
            jin:{
            if ((a = *++haystack) == c)
              goto crest;
              }
            else
              a = *++haystack;
            do
              {
            for (; a != b; a = *++haystack)
              {
                if (haystack >= end)
                  goto ret0;
                if ((a = *++haystack) == b)
                  break;
                if (haystack >= end)
                  goto ret0;
              }
              }
            while ((a = *++haystack) != c);
          }
        crest:
          {
            chartype a;
            {
              const unsigned char *rhaystack;
              if (*(rhaystack = haystack-- + 1) == (a = *(rneedle = needle)))
            do
              {
                if (!a)
                  goto foundneedle;
                if (*++rhaystack != (a = *++needle))
                  break;
                if (!a)
                  goto foundneedle;
              }
            while (*++rhaystack == (a = *++needle));
              needle = rneedle;    /* took the register-poor aproach */
            }
            if (!a)
              break;
          }
        }
        }
    foundneedle:
      return (char *) haystack;
    ret0:
      return 0;
    }
    //libc_hidden_builtin_def (memstr)

  • 相关阅读:
    python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化
    python学习笔记-day4笔记 常用内置函数与装饰器
    Python学习笔记-Day3-python内置函数
    Python学习笔记-Day3-文件操作
    Python学习笔记-Day3-python函数
    Python学习笔记-Day3-python关键字
    Python学习笔记-Day3-set集合操作
    Python学习笔记-Day2-Python基础之列表操作
    Python学习笔记-Day2-Python基础之元组操作
    Python学习笔记-Day2-Python基础之字典操作
  • 原文地址:https://www.cnblogs.com/lexus/p/3001100.html
Copyright © 2011-2022 走看看