C'est un type de compression assez commun qu'on appel RLE et en pratique ce ne serait pas compressé comme ça si on voulait des perfs (ce qui est la principale raison d'utiliser de la compression RLE en fait).
A priori le mieux dans ce cas ce serai d'avoir 2 tableaux : 1 tableau d'int avec les valeur de répétition et 1 de char avec les caractères à répéter, ça éviterai d'avoir à gérer la conversion int->string/string->int qui va sûrement être le truc qui bouffe le plus de perf à la compression comme à la décompression.
Ça peut être une bonne idée de transmettre aussi la taille du tableau décompressé en préambule pour pouvoir ne faire qu'une seule allocation au début de la décompression plutôt que plusieurs réallocations au fur et à mesure que le tableau grandit.
Donc utiliser une structure qui ressemblerait à :
Code:
{6,{c,a,t},{2,3,1}} // -> ccaaat
{17,{n,e,z},{3,12,2}} // -> nnneeeeeeeeeeeezz
Mais du coup ça devient trivial à décompresser et ça ne fait plus un exercice de code très intéressant .