/*
*Leo que solicitas guardar en una matriz los elementos repetidos.
*En este ejemplo no se crea una nueva matriz, se usa la misma matriz
*para mostrar los elementos repetidos.
*/
char *alfa[] = {
"repe","repe","111","2","3","repe","4",
"5","repe","666","666","7","repe","8","9","0","repe","111",
"123","88888",NULL
};
int main(void){
char **s;
char **raw;
char **cpr;
char *pa;
char *pb;
char **ax;
char **bx;
char **end;
end = cpr = raw = s = alfa;
bx = ax = alfa;
/*
*(end) apunta al final de la matriz
*/
while(*end){
end++;
}
while(s < end){
raw = s++;
cpr = s;
while(cpr < end){
/*
*Esta parte se puede sustituir por un simple strcmp,
*lo realizo con punteros por razones didacticas.
*/
pa = *raw;
pb = *cpr;
while(*pa && *pb){
if(*pb != *pa)
break;
pb++;
pa++;
}
if(*pa == 0x0 && *pb ==0x0){
printf("%s<---iguales--->%s\n", *raw, *cpr);
/*
*Guardamos posicion repetido
*/
pa = *cpr;
bx = ax = cpr;
/*
*hasta el ultimo elemento de la matriz
*/
while(ax < end){
bx = ax++;
}
/*
*Permuta entre la posicion del elemento repetido
*y la ultima posicion.
*(bx) apunta a la ultima posicion, (pa) apunta la
*posicion del elemento repetido.
*Se intercambian posiciones.
*/
*cpr = *bx;
*bx = pa;
end = bx;
/*
*El elemento repetido esta posicionado al final, pero
*la matriz contiene el mismo elemento repetido varias
*veces, se debe continuar en la misma posicon y posionar
*al final TODOS los elementos repetidos, esa es la razon
* de este feo y misterioso continue.
*/
continue;
}
cpr++;
}
}
/*
*La matriz no debe contener elementos repetidos.
*Espero que me pongas "nota", yo creo que la solucion que propongo
* al menos merece un aprobado :-).
*/
printf("\nRESULTADO:\n");
s = alfa;
while(s < end){
printf("%s\n", *s);
s++;
}
/*
*Elementos repetidos
*/
printf("\nREPETIDOS:\n");
while(*end){
printf("%s\n", *end);
end++;
}
/*
*Codificar en C es muy sencillo, lo complicado somos nosotros.
*/
return 0;
}