, поскольку эти шаблоны обычно не встречаются в удобочитаемой для человека форме, я заключу, что они должны быть машиночитаемыми, поскольку 99,9% слов будут иметь отрицательное сжатие, даже если они имеют повторяющиеся символы
ех.
вакуум -> v1a1c2u2m1
вам не нужно использовать int для счетчика, вы можете просто использовать:
char c, counter=-128;
тогда вы можете просто изменить
counter=0;
//to
counter=-128;
*q++ = counter+'0';
//to
*q++ = counter;
если вам нужен читабельный вывод, используйте что-то вроде:
printf("%c,%d:",string[pos],(string[pos+1]+128));