Как сжать массив,типа string на с++

Нужно сжать массив string по такому алгоритму дан условный массив string arr = "aaabbc" ,чтобы вышло 3a2bc

Все пробую через ветвление сделать,но уперся в то,что этих условий уже много становится,грубо говоря,чтобы сжать строку по моему методу,при string arr = "aaaaaa" у меня выходит очень много кода,который,как я догадываюсь ,можно заменить несколькими строчками.Плюс появилась проблема,что ,даже если делать моим способом через if ,то я не совсем понимаю как избежать такого результата вывода массива после "сжатия" ,если встречаются в строке несколько повторений по 3+ букв.Примерно так выглядит вывод Вывод слов после сжатия текста,где каждая новая строчка - это новое слово

Сам способ сжатия вот,

string wordZIP = word;//word- слово,которое рандомно генерируется в другом цикле, его и нужно сжать.
        for (int i = 1; i < wordZIP.length(); i++)
        {
            if (wordZIP[i] == wordZIP[i - 1])
            {
                wordZIP[i - 1] = '2';
            }
        }

        for (int i = 1; i < wordZIP.length(); i++)
        {
            if (wordZIP[i] == wordZIP[i - 1] && wordZIP[i] == '2')
            {

                wordZIP[i - 1] = { '\0' };
                wordZIP[i] = '3';

            }
        }
        switch (randomCategory) //randomCategory-ранд.переменная,которая отвечает за распределение по массивам
        {
        case 1:
            slovo1ZIP[i1++] = wordZIP;

            break;
        case 2:
            slovo2ZIP[i2++] = wordZIP;

            break;
        case 3:
            slovo3ZIP[i3++] = wordZIP;

            break;
        default:
            cout << "error";
            break;
        }
    }

P.S.Если подытожить ,то как сделать сжатие, чтобы не было пробелов в слове и не иметь,например при генерации слов из 1 буквы, такой вывод 222222222q при использовании алфавита ,состоящего только из q


Ответы (1 шт):

Автор решения: MBo

Вот смотрите:
когда очередной символ не равен предыдущему, запишите в результат разность текущего индекса и индекса старта серии (если эта разница более 1), затем символ в начале серии, потом запомните текущий индекс как старт. Вот, собственно, и всё (конец строки обработать так же)

→ Ссылка