#include <iostream.h>
#include <stdlib.h>
#include <string.h>

//lee un texto terminado en un punto y lo escribe en la pantalla con todas
// sus palabras invertidas.
 

const int N = 10;
const char fin = '.';
typedef char Cadena[N];

bool esSep(char c);
// comprueba si c es un separador

void saltarSep(char& c);
// salta los separadores de la entrada y
// los escribe en la salida

void escInv(Cadena s);
// escribe invertidos los caracteres de s

void vacia(Cadena& s);
// crea una cadena vacia

void concCar(Cadena& s, char c);
// concatena un caracter a una cadena

int main()
//lee un texto terminado en un punto y lo escribe en la pantalla con todas
// sus palabras invertidas.
{
      Cadena pal;
      char c;

      vacia(pal);
      saltarSep(c);
      while (c!=fin){
        if (!esSep(c)){
          concCar(pal,c);
          cin.get(c); // para que no se salte los blancos.
        }
        else {
          escInv(pal);
          vacia(pal);
          cout << c;
          saltarSep(c);
        }
      }
      escInv(pal);
      cout << '.' << endl;
      system("PAUSE");
      return 0;
}

// implementación de los subprogramas

bool esSep(char c){
// comprueba si c es un separador
  return (c == ' ')||(c == ',');
}
 

void saltarSep(char& c){
// salta los separadores de la entrada y
// los escribe en la salida

  do{
     cin.get(c);
     if (esSep(c)) cout << c;
  }
  while  (esSep(c));
}
 

void escInv(Cadena s){
// escribe invertidos los caracteres de c

  for (int i = strlen(s)-1; i >= 0;i--)
    cout << s[i];
}

void vacia(Cadena& s){
// crea una cadena vacia
  s[0]='\0';
}

void concCar(Cadena& s, char c){
// concatena un caracter a una cadena
  int n=strlen(s);
  s[n]=c;
  s[n+1]='\0';

}