Трудно решить это без спецификации для вашей кодировки, но в этом коде
if (k + 1 < s.Length && cv != 1 && cv >= 2 && cv <= 9)
{
for(int v = 0; v < cv; v++)
d += s[k+1];
}
Я бы ожидал, что k будет увеличен перед выходом из блока if.
Кроме того, я ожидаю, что следующим if (cv==1)
будет else if
.
В этом блоке cv==1
я думаю, что вы должны просто обработать следующий символ и позволить внешнему циклу for выполнить свою работу.
Я тоже не понимаю, как этот блок мог работать вообще