#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void CrearString(char **str);
void MostrarString(char *str);
void MostrarStringInvertido(char *str);

int main()
{
    char *frase=NULL;
    puts("Ingrese una frase:");
    CrearString(&frase);
    puts("La frase ingresada es:");
    MostrarString(frase);
    puts("Su frase Invertida es:");
    MostrarStringInvertido(frase);
    system("pause");
    return 0;
}

void CrearString(char **texto)
{
    char *aux=NULL, c;
    int tec=0,i;

    while(c=getch(), c!='\r')
    {
        if(c=='\b')
        {
            if(tec>0)
            {
                putc(c,stdout);
                putc(' ',stdout);
                putc(c,stdout);
                tec--;
            }
        }else{
            tec++;
            putc(c, stdout);
            aux=*texto;
            *texto=(char*)malloc((tec+1)*sizeof(char));
            (*texto)[tec-1]=c;
            for(i=0;i<tec-1;i++)
                (*texto)[i]=aux[i];
            free(aux);
        }
    }
    (*texto)[tec]='\0';
    putc('\n', stdout);
}

void MostrarString(char *str)
{
    int i;
    for(i=0;str[i];i++)
        putc(*(str+i), stdout);
    putc('\n', stdout);
}

void MostrarStringInvertido(char *str)
{
    int i;
    for(i=0;str[i+1];i++);
    for(;i>=0;i--)
        putc(*(str+i), stdout);
    putc('\n', stdout);
}
