fork download
  1. void init_search(const char *string)
  2. {
  3. size_t i;
  4.  
  5. len = strlen(string);
  6. for (i = 0; i <= UCHAR_MAX; i++) /* rdg 10/93 */
  7. table[i] = len;
  8. for (i = 0; i < len-1; i++)
  9. table[(unsigned char)string[i]] = len - i - 1;
  10. secondary = table[(unsigned char)string[len-1]];
  11. table[(unsigned char)string[len-1]] = 0;
  12. findme = (char *)string;
  13. }
  14.  
  15. /*
  16. ** Call this with a buffer to search
  17. */
  18.  
  19. char *strsearch(const char *string)
  20. {
  21. register size_t shift;
  22. register size_t pos = len - 1;
  23. char *here;
  24. size_t limit=strlen(string);
  25.  
  26. while (pos < limit)
  27. {
  28. while( pos < limit &&
  29. (shift = table[(unsigned char)string[pos]]) > 0)
  30. {
  31. pos += shift;
  32. }
  33. if (0 == shift)
  34. {
  35. if (0 == strncmp(findme,
  36. here = (char *)&string[pos-len+1], len))
  37. {
  38. return(here);
  39. }
  40. else pos+=secondary;
  41. }
  42. }
  43. return NULL;
  44. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty