Answer the question
In order to leave comments, you need to log in
RLE compression algorithm?
Hello! I came across an interesting problem: the RLE compression algorithm.
The essence of the task is that the user enters a string, and the program displays the same string, but instead of repeating characters, it displays their number. I'm still a handyman, but I need an objective assessment of what I did. I will be VERY grateful for any criticism. Sobsna, here is the code:
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_ALL, "ru");
string str;
cout << "Введите строку: "; getline(cin, str);
int length = str.size(), // длинна строки
tmp = 1, // кол-во повторений каждого элемента
k = length, // длина сжатой строки
a = 0; // индекс для заполнения массива
int *arr = new int[length]; // массив
for (int i = 0; i < length - 1; i++)
{
for (int j = i + 1; j <= length; j++)
{
if (str[i] == str[j])
{
tmp++; // считаем повторения
k--; // уменьшаем длинну
}
else
{
arr[a] = tmp; // записываем кол-во повторений в массив
a++; // переходим дальше по массиву
tmp = 1; // возвращаем значение
i = j; // "перепрыгиваем" через все повторяющиеся элементы
}
}
}
cout << "Исходная строка: " << str << endl << "Сжатая строка: ";
for (int i = 0, a = 0; a < k; i += arr[a], a++) // с помощью i выбираем нужные символы, с помощью a выводим кол-во повторений
{
if (arr[a] == 1) // если символ не повторялся, просто выводим его
{
cout << str[i];
}
else // иначе выводим символ с кол-вом повторений
{
cout << str[i] << arr[a];
}
}
cout << endl;
delete[] arr;
system("pause");
return 0;
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question