кодирование длин серий с использованием C ++ - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть текстовый файл со строкой, которую я хотел бы закодировать.

Допустим, это: aaahhhhiii kkkjjhh ikl wwwwwweeeett

и вот код:

void Encode(std::string &inputstring, std::string &outputstring)
{
    for (int i = 0; i < inputstring.length(); i++) {
        int count = 1;
        while (inputstring[i] == inputstring[i+1]) {
            count++;
            i++;
        }
        if(count <= 1) {
            //std::cout << inputstring[i] << "";
            outputstring += inputstring[i];
            outputstring += "";
        } else {
            //std::cout << inputstring[i] << count;
            outputstring += inputstring[i];
            outputstring += count;
        }
    }
}

вывод должен быть: 3a4h3i 3k2j2h ikl 6w4e2t

Символы или пробелы с меньшим (или равным), чем один символ, только что распечатаны - без изменений.

Пока все хорошо и код работает ... на самом деле.

Когда я использую std::cout в if и else - тогда он показывает вывод, как указано выше. Так прекрасно.

НО, я бы хотел передать результат параметрам (std::string &outputstring) и распечатать результат в основном методе.

Но он печатает ТОЛЬКО if statement не else statement.

Может кто-нибудь помочь мне с этим вопросом?

1 Ответ

1 голос
/ 16 февраля 2020

Ваша проблема была с линией outputstring += count;. Целое число интерпретируется как код символа при назначении его в строку. Вам не нужен символ с количеством символов, но вы хотите преобразовать число в строку, поэтому вам следует использовать outputstring += std::to_string(count);

...