Nie potrzebujesz do tego tablicy – iteruj po ciągu znaków i inkrementuj licznik jeśli kolejne znaki są takie same. Gdy napotkasz na inny, wyświetl bieżący stan licznika na ekranie, następnie wyzeruj go i licz od nowa.
Nie chce mi się już myśleć nad implementacją, bo język C nie jest moją mocną stroną, ale w Pascalu można to napisać kilkoma linijkami kodu (w C pewnie wyjdzie jeszcze krótszy):
procedure PrintDigits(AChar: PChar);
var
Digit: PChar;
Count: Integer;
begin
while AChar^ <> #0 do
begin
Digit := AChar;
Count := 0;
while AChar^ = Digit^ do
begin
Count += 1;
AChar += 1;
end;
WriteLn(Digit^, '[', Count, ']');
end;
end;
https://ideone.com/De69xi
Do rozwiązania Twojego problemu można użyć implementacji algorytmu RLE, tyle że na ekranie wyświetla się inaczej sformatowane dane. W razie czego, w sieci znajdziesz mnóstwo gotowców.
Late edit: odpowiednik powyższej procedurki w C:
void printDigits(char* curr)
{
char* digit;
int count;
while(*curr != 0)
{
digit = curr;
count = 0;
while(*curr == *digit)
{
count++;
curr++;
}
printf("%c[%u]\n", *digit, count);
}
}
http://cpp.sh/9atma