//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';
}