Hola! el problema es que en:
if (cadena[i]!=aux[j])
aux[i]=cadena[i];
no estas comparando con toda la cadena de aux sino con un caracter. Solo comparas un caracter y directamente lo guardas
Esto es lo q primero q se me ocurrio
aux[0]=cadena[0];
for (i=1; i<strlen(cadena); i++)
{
cont=0;
for (j=0; j<strlen(aux); j++)
{
if (aux[j]!=cadena[i])
{
cont++;
}
}
aux[i-rep]=cadena[i];
}
else rep++;
}
Fijate si lo entendes sino pregunta,saludos
Eso tampoco funcionaria, en un principio hay un par de errorcillos....
No puedes comparar con strlen(aux), por que si la cadena es de 20 y solo hay ocupados (inicializados) x posiciones la demas son aleatorios o cualquier cosa que haya en la memoria por lo que falla.... Se compara if (cont==i-rep)...
Al igual que la entrada en el segundo for tambien....
Y luego una vez termine el bucle para que la funcion puts no imprima todo lo que haya en ese array debes ponerle el caracter nulo '\0' en i-rep.
Quedaría asi:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(){
char cadena[20];
char aux[20];
int i;
int cont=0;
int j;
printf("Inserte la cadena de texto: "); aux[0]=cadena[0];
int rep=0;
for(i=1;i<strlen(cadena);i++){
for(j=0;j<(i-rep);j++){
if(cadena[i]!=aux[j])
cont++;
}
if (cont==(i-rep)){
aux[i-rep]=cadena[i];
}
else
rep++;
cont=0;
}
aux[i-rep]='\0';
return(0);
}