S15 Answer


/* Puzzle S15 — Find first substring */
#include <stdio.h>
#include <stdlib.h>

int startsWith( char const *bigString, char const *start )
{
  while ( *bigString && *start && *bigString == *start )
  {
    bigString++; start++;
  }
  return !*start;
}

char *findSubstring( char const *source, char const *sub )
{
  int found = 0;
  while ( *source && !(found=startsWith( source, sub )) )
    source++ ;

  if (found)
    return (char *)source;
  else
    return NULL;
}


int main(int argc, char *argv[])
{
 char *trials[][2] =
  {
    {"abcdef", "a"},
    {"abcdef", "abc"},
    {"abcdef", "d"},
    {"abcdef", "def"},
    {"abcdef", "f"},
    {"abcdef", "xyz"},
    {"abcdef", "axx"},
    {"abcdef", "abcdefg"},
    {"abcdef", "rats"},
    {"abbccddeef", "cc"},
    {"abcdefg", "g"},
    {"applecart", "c"},
    {"green", "apple"},
    {"apple", ""},
    {"", "rats"},
    {"",""}
  };

  int j; char *loc;
  for ( j=0; j<sizeof(trials)/sizeof(trials[0]); j++ )
  {
    loc = findSubstring( trials[j][0], trials[j][1] );
    if ( loc )
      printf("%s : %s : %s\n", trials[j][0], trials[j][1], loc );
    else
      printf("%s : %s : %s\n", trials[j][0], trials[j][1], "not found" );
  }

  system("PAUSE");
  return 0;


Comments: