/*
 * rep_alpha.c
 * This program reads a string and replaces all the alphabetic characters
 * in it, according to a given replacement table.
 */

#include <stdio.h>
#include <ctype.h>

#define MAX_LEN 200

int main ()
{
  char   rep_tab[] = "QWERTYUIOPASDFGHJKLZXCVBNM";
                                /* The replacement table: The i'th character
                                 * in the Latin alphabet should be replaced
                                 * by the i'th character of this string. */

  char   str_in [MAX_LEN + 1];  /* The input string. */
  int    l_str;                 /* Its length. */
  char   str_out [MAX_LEN + 1]; /* The output string. */
  int    c;
  int    i;

  /* Read the input string, character by character. */
  printf ("Please enter the input string: ");
  
  l_str = 0;
  c = getchar();
  while (c != '\n' && c != EOF)
  {
    /* Watch out for inputs that are too long! */
    if (l_str > MAX_LEN)
    {
      printf ("Error -- input string too long.\n");
      return (1);
    }

    /* Store the current character. */ 
    str_in[l_str] = c;
    l_str++;

    /* Read the next input character. */
    c = getchar();
  }

  /* Take care of the terminating NULL. */
  str_in[l_str] = '\0';

  /* Go over the input characters. */
  for (i = 0; i < l_str; i++)
  {
    /* Check if the current character is a letter. */
    if (isalpha (str_in[i]))
    {
      /* Convert to an upper-case character and use the replacement table to
       * obtain the target character. */
      c = toupper (str_in[i]);
      str_out[i] = rep_tab[c - 'A'];
    }
    else
    {
      /* Not a letter: Leave the character as is. */
      str_out[i] = str_in[i];
    }
  }

  /* Take care of the terminating NULL. */
  str_out[l_str] = '\0';

  /* Print the two string. */
  printf ("Input : %s\n", str_in);
  printf ("Output: %s\n", str_out);

  return (0);
}

