Tutaj zamieszczam dosc proste rozwiazanie tego problemu wg mojego zrozumienia zadania :
char * eraseRepetitions(char T[], int n) {
if( T == 0 || n < 1 ) return NULL;
if( n == 1 ) return T;
int a=0, j=0, k=0, l=0;
char *A = new char[n+1];
memset(A,'\0',n+1);
A[0] = T[0];
for(int i=1, a=1; i<n ;) { // petla przechodzi po kazdym znaku ciagu
for(j=0; j<i; j++) { // petla szuka wczesniejszego wystapienia znaku T[i]
k=j;
l=i;
while( (l<n) && (k<i) && (T[k] == T[l++]) ) k++; // petla sprawdza identycznosc ciagow
if( k == i ) { // jesli identycznosc doszla do znaku i-1( i po inkrementacji)
i += k-j; // to znaczy, ze znaleziono wystepujace po sobie iden. ciagi
break; // przeskakujemy do przodu o dlugosc powtorzonego ciągu i przerywamy szukanie
}
}
if( k-j > 0 ) continue; // jesli znaleziono identyczne ciagi, to nie przepisujemy bezmyslnie
A[a++] = T[i++];
}
char *B = new char[strlen(A)+1];
strncpy(B, A, strlen(A)+1);
delete [] A;
return B;
}
Pisane z palca, nie gwarantuje 100% poprawności :P