/* 
 * Problema 17.  Escreva uma função com protótipo
 * 
 * int converta(char *ch);
 * 
 * que recebe um caractere *ch e devolve 1 se *ch for um caractere
 * alfanumérico (A-Za-z ou 0-9) ou um "whitespace"/"espaço em branco"
 * (isto é, ' ', '\n' ou '\t' (caracter TAB)) e devolve 0 caso contrário.
 * Além disso, no caso de *ch ser uma letra em a-z, sua função deve
 * converter *ch para maiúscula.  No caso de *ch ser um whitespace, sua
 * função deve converter *ch para ' '.  Mantenha *ch inalterado em todos
 * os outros casos.
 * 
 * Escreva um programa que leia uma sequência de caracteres
 * alfanuméricos, whitespaces e sinais de pontuação (diferentes de '$'),
 * terminada por '$', e que imprima a entrada convertida para maiúsculas,
 * eliminando os caracteres que não forem alfanuméricos ou whitespaces e
 * transformando todos os whitespaces para ' '.  (Seu programa deve
 * imprimir um '\n' no fim de sua saída.)
 * 
 * Por exemplo, com a entrada
 * 
 * caracteres
 * alfanumericos, whitespaces e
 * sinais de pontuacao$
 * 
 * seu programa deve ter a saída
 * 
 * CARACTERES ALFANUMERICOS WHITESPACES E SINAIS DE PONTUACAO
 *
 */

#include <stdio.h>

#define TRUE 1
#define FALSE 0

int converta(char *ch);

int main()
{
  char c;

  do {
    scanf("%c", &c);
    if (converta(&c))
      printf("%c", c);
  } while (c != '$');

  printf("\n");
  return 0;
}

int converta(char *ch)
{
  if ('a' <= *ch && *ch <= 'z') {
    *ch -= 'a' - 'A';
    return TRUE;
  }
  if (*ch == ' ' || *ch == '\n' || *ch == '\t') {
    *ch = ' ';
    return TRUE;
  }
  
  return FALSE;
}
