#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?
Спасибо за ваше время, если вы добрались до здесь.^^