S20 Answer


/* Puzzle S20 — Delete each instance of a particular character from a string */
#include <stdio.h>
#include <stdlib.h>

void deleteCh( char *str, char ch )
{
  /* Inspect each character of the string */
  while ( *str )
  {
    /* if the character is to be deleted... */
    if ( *str == ch ) 
    {
      /* slide all the characters to the right down one */
      char *p = str;
      while ( *p )
      {
        *p = *(p+1);
         p++ ;
      }
      /* a new character might need to be deleted */
      /* so don't increment str */
    }

    /* otherwise, move on to the next character */
    else
      str++ ;
  }
}

struct test
{
  char str[50];
  char ch;
};

int main(int argc, char *argv[])
{
  struct test trials[] =
  {
    {"aXX", 'a'},
    {"XXa", 'a'},
    {"aXX", 'x'},
    {"a",   'a'},
    {"aa",  'a'},
    {"aaa", 'a'},
    {"bca", 'a'},
    {"bcaa", 'a'},
    {"aaabbbaaa", 'a'},
    {"xaxaxa", 'a'},
    {"XAAxaa", 'a'},
    {"applecart", 'a'},
    {"blue berry", 'e'}
 };

  int j;
  for ( j=0; j<sizeof(trials)/sizeof(struct test); j++ )
  {
    printf( "%s\t", trials[j].str );
    deleteCh( trials[j].str, trials[j].ch );
    printf( "%c\t%s\n",
        trials[j].ch, trials[j].str );
  }

  system("PAUSE");
  return 0;
}

Comments: