fgf

这是我的strstr实现:
char *qsearch(const char *str, int slen, const char *patt, int plen)
{
  const char *s, *p, *tx = str;
  static int td[128],c=0;
/*************预处理*****************************/
  for ( ++plen; c < 128; ++c) //建立表
    td[c] = plen ;
  --plen;          //复原
 
  for (p=patt; *p; p++) //初始化表
    td[*p] = plen - (p - patt);//m-(p-patt)即失配时模式串右移的步数

/***************模式匹配开始*********************/
  while ( (s=tx+plen-1) <= str+slen-1) {
  for (p = patt+plen-1; *p == *s; --s)
    --p;
  if (*p == 0)  // 找到并返回
  return (char*)tx;
tx += td[tx[plen]]; // 模式右移
  }
  return NULL;
}

一:这个是网上找到strstr实现1
char *  strstr (buf, sub)
    register char *buf;
    register char *sub;
{
    register char *bp;
    register char *sp;

    if (!*sub)
      return buf;
    while (*buf)
    {
        bp = buf;
        sp = sub;
        do {
            if (!*sp)
              return buf;
        } while (*bp++ == *sp++);
        buf += 1;
    }
    return 0;
}

二:这是gcc的实现
const char * bstrstr(const char *src, const char *needle)
{
    const char *p1, *p2;

    p1 = src;
    p2 = needle;
    while (*src != '/0' && *needle != '/0')
    {
      if (*src++ != *needle++) {
            needle = p2;
              src = ++p1; //从下一个字符开始搜索needle
      }
    }
    if (*needle == '/0')
      return p1;

    return NULL;
}

测试字符串char *s="sjuwfdjkasbUYTGdflksjflkhjdslkdlkfhjBWEVFBSDJKJBHSDsaFdfasIUasGW
                EFkasfhskaddsajiudvdbkajdsfgviausdgEJSAHDKJAKJGHhsadhbjjh";
          char *t="sad";
进行一千万次

有个很奇怪的现象,我的实现(sunday) 的时间是 3062ms,kmp算法实现是 9112ms,一的实现是1133ms
                            可是gcc那个实现竟然是36ms!!!
gcc那个实现和一的实现可以说没区别,都是朴素匹配,为什么那个时间那么快!!!?????????

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值