⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pbmsrch.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
/***        A Pratt-Boyer-Moore string search, written by Jerry Coffin**  sometime or other in 1991.  Removed from original program, and**  (incorrectly) rewritten for separate, generic use in early 1992.**  Corrected with help from Thad Smith, late March and early**  April 1992...hopefully it's correct this time. Revised by Bob Stout.****  This is hereby placed in the Public Domain by its author.****  10/21/93 rdg  Fixed bug found by Jeff Dunlop*/#include <stddef.h>#include <string.h>#include <limits.h>static size_t table[UCHAR_MAX + 1];static size_t len;static char *findme;/***  Call this with the string to locate to initialize the table*/void init_search(const char *string){      size_t i;      len = strlen(string);      for (i = 0; i <= UCHAR_MAX; i++)                      /* rdg 10/93 */            table[i] = len;      for (i = 0; i < len; i++)            table[(unsigned char)string[i]] = len - i - 1;      findme = (char *)string;}/***  Call this with a buffer to search*/char *strsearch(const char *string){      register size_t shift;      register size_t pos = len - 1;      char *here;      size_t limit=strlen(string);      while (pos < limit)      {            while( pos < limit &&                  (shift = table[(unsigned char)string[pos]]) > 0)            {                  pos += shift;            }            if (0 == shift)            {                  if (0 == strncmp(findme,                        here = (char *)&string[pos-len+1], len))                  {                        return(here);                  }                  else  pos++;            }      }      return NULL;}#ifdef TEST#include <stdio.h>main(){      char *here;      char *find_strings[] = {"abb", "you", "not", "it", "dad", "yoo", "hoo",                              "oo", "oh", "xx", "xx", "x", "x", NULL};      char *search_strings[] = {"cabbie", "your", "It isn't here",                                "But it is here", "hodad", "yoohoo", "yoohoo",                                "yoohoo", "yoohoo", "yoohoo", "xx", "x", "."};      int i;      for (i = 0; find_strings[i]; i++)      {            init_search(find_strings[i]);            here = strsearch(search_strings[i]);            printf("\"%s\" is%s in \"%s\"", find_strings[i],                  here ? "" : " not", search_strings[i]);            if (here)                  printf(" [\"%s\"]", here);            putchar('\n');      }      return 0;}#endif /* TEST */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -