home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / c / snippets / stristr.c < prev    next >
C/C++ Source or Header  |  1995-03-13  |  2KB  |  82 lines

  1. /*
  2. ** Designation:  StriStr
  3. **
  4. ** Call syntax:  char *stristr(char *String, char *Pattern)
  5. **
  6. ** Description:  This function is an ANSI version of strstr() with
  7. **               case insensitivity.
  8. **
  9. ** Return item:  char *pointer if Pattern is found in String, else
  10. **               pointer to 0
  11. **
  12. ** Rev History:  02/03/94  Fred Cole
  13. **
  14. ** Hereby donated to public domain.
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <string.h>
  19. #include <ctype.h>
  20.  
  21. typedef unsigned int uint;
  22.  
  23. char *stristr(char *String, char *Pattern)
  24. {
  25.       char *pptr, *sptr, *start;
  26.       uint  slen, plen;
  27.  
  28.       for (start = String,
  29.            pptr  = Pattern,
  30.            slen  = strlen(String),
  31.            plen  = strlen(Pattern);
  32.  
  33.            /* while string length not shorter than pattern length */
  34.  
  35.            slen >= plen;
  36.  
  37.            start++, slen--)
  38.       {
  39.             /* find start of pattern in string */
  40.             while (toupper(*start) != toupper(*Pattern))
  41.             {
  42.                   start++;
  43.                   slen--;
  44.  
  45.                   /* if pattern longer than string */
  46.  
  47.                   if (slen < plen)
  48.                         return((char*)0);
  49.             }
  50.  
  51.             sptr = start;
  52.             pptr = Pattern;
  53.  
  54.             while (toupper(*sptr) == toupper(*pptr))
  55.             {
  56.                   sptr++;
  57.                   pptr++;
  58.  
  59.                   /* if end of pattern then pattern was found */
  60.  
  61.                   if ('\0' == *pptr)
  62.                         return (start);
  63.             }
  64.       }
  65.       return((char*)0);
  66. }
  67.  
  68. #ifdef TEST
  69.  
  70. int main(void)
  71. {
  72.       char buffer[80] = "heLLo, HELLO, hello, hELLo";
  73.       char *sptr = buffer;
  74.  
  75.       while (0 != (sptr = StriStr(sptr, "hello")))
  76.             printf("Found %5.5s!\n", sptr++);
  77.  
  78.       return(0);
  79. }
  80.  
  81. #endif
  82.