/*
 * srch_str.c
 * This program reads two strings and finds all the occurrences of the second
 * string within the first.
 */

#include <stdio.h>
#include <string.h>

#define MAX_LENGTH 80

int main ()
{
  char   str1[MAX_LENGTH + 1];  /* The first string. */ 
  char   str2[MAX_LENGTH + 1];  /* The second string. */
  char   *p_suffix;             /* The current suffix of the first string. */
  char   *p_place;              /* The current occurence of the second string
                                   in this suffix. */
  int    index;                 /* The index in which it occurs. */
  int    n_occurs = 0;          /* Total number of occurences. */

  /* Read the input strings. */
  printf ("1. Please enter a string (at most %d characters): ", MAX_LENGTH);
  scanf ("%s", str1);
  printf ("2. Please enter a string (at most %d characters): ", MAX_LENGTH);
  scanf ("%s", str2);

  /* Initially, the suffix of str1 equals the entire string. */
  p_suffix = str1;

  while ((p_place = strstr (p_suffix, str2)) != NULL)
  {
    /* Print the current occurence. */
    index = p_place - str1;
    printf ("- Found \"%s\" at index %d.\n", str2, index);

    /* Take the suffix so it begins one character after the location of the
       current occurence of str2. */
    p_suffix = p_place + 1;

    /* Update the number of occurences. */
    n_occurs++;
  }

  printf ("Found %d occurence%s in total.\n",
          n_occurs, (n_occurs == 1) ? "" : "s");

  return (0);
}

