S17 Answer


/* Puzzle S17 — Determine if every character in one string is also in another */
#include <stdio.h>
#include <stdlib.h>

/* return 1 if every character in the string *sub is also contained in the string *set*/
int stringSubset( char const *sub, char const *set)
{
  char const *p, *s;

  for ( p=sub; *p; p++ )
  {
    for ( s=set; *s && *s != *p; s++);
    if ( *s == '\0' ) return 0;
  }

  return 1;
}

int main(int argc, char *argv[])
{
  char *trials[][2] =
  {
    {"a","a"},
    {"a","ab"},
    {"a","aaa"},
    {"ab","ab"},
    {"aaa","a"},
    {"abc","abc"},
    {"a","xyza"},
    {"a","xyzaxyz"},
    {"x","a"},
    {"x","abc"},
    {"ababab","abcxyz"},
    {"aaabbbcccaaa","abc"},
    {"aabbaabbaax","abc"},
    {"xaabbaabbaa","abc"},
    {"aabbxaabbaa","abc"},
    {"aabbxaabbaa","abc"},
    {"aabbxaaxbbaa","abc"},
    {"empty set",""},
    {"","abc"},
    {"",""}
  };

  int j, loc ;
  for ( j=0; j<sizeof(trials)/sizeof(trials[0]); j++ )
  {
    if ( stringSubset( trials[j][0], trials[j][1] ) )
      printf("%s \tcontains only characters from %s\n",
          trials[j][0], trials[j][1] );
    else
      printf("%s \tcontains extra characters than %s\n",
          trials[j][0], trials[j][1] );
  }

  system("PAUSE");
  return 0;
}

Comments: