Выполнить кодирование длины в C ++ - PullRequest
0 голосов
/ 02 октября 2018
#include <iostream>
#include <string>
#include <vector>

using namespace std;

string compression(const string & str){
    int i = str.size();
    string letters;
    letters[0] = str[0];
    for (int j = 0; j < i; ++j){
        int count = 1;
        while (str[j] == str[j+1]){
            count++;
            j++;
        }
        letters.push_back('0' + count);
        letters.push_back(str[j]);
    }
    return letters;
}

int main(){
    string input;
    char c;
    try {
        cout << "Enter the data to be compressesed: "<< endl;
        cin >> input;
        for (int z = 0; z < input.length(); ++z){
            c = input.at(z);
        }
        if (!(c >= 'a' && c <= 'z')){
            throw runtime_error("error: invalid input");
        }
    }
    catch (runtime_error& excpt){
        cout << excpt.what() <<endl;
        return 0;
    }
    cout << "The compressed data is " << compression(input) << endl;
    return 0;
} 

Ожидаемый вывод повторяется для каждой серии символов.Вот количество повторений в последовательности:

Некоторые примеры:

aaeeeeae = 2a4e1a1e

rr44errre = неверный ввод

eeeeeeeeeeeeeeeeeeeee = 21e

код работает правильно только в том случае, если символ повторяется 9 или менее раз подряд.для значений от 10 и более на вход вводятся другие символы.Например, он остается пустым в течение 10, поэтому, если input является 'aaaaaaaaaabb', вывод будет просто 'a2b' вместо '10a2b'.Для 11 его выходных данных ';', поэтому, если входными данными является 'aaaaaaaaaaabb', выходными данными является '; a2b' по какой-то причине.

Поэтому мой вопрос состоит в том, как заставить работать pushback для всех чисел, а не толькоот 0-9?

Спасибо за ваше время, если вы добрались до здесь.^^

1 Ответ

0 голосов
/ 03 октября 2018

Если вы можете использовать c ++ 11 или новее, ваша функция compression может выглядеть так:

string compression(const string & str){
    int i = str.size();
    string letters;

    for (int j = 0; j < i; ++j){
        int count = 1;
        while (str[j] == str[j+1]){
            count++;
            j++;
        }
        letters += std::to_string(count);
        letters.push_back(str[j]);
    }
    return letters;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...