S
S
Sazoks2019-03-01 22:31:39
C++ / C#
Sazoks, 2019-03-01 22:31:39

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;
}

The results of the program:
1) input: aaaaabbcccd
output: a5b2c3d
2) input: qqiipekkk;;;
output: q2i2pek3;3
Well, thanks in advance and good to you! ^_^

Answer the question

In order to leave comments, you need to log in

1 answer(s)
H
h0w4rd, 2019-04-07
@h0w4rd

And if there are more than 9 identical characters in a row? "a11" Is that one "a" and 1? Or 11 "a"?
And if "abc1", is it "abc" or "abc1"?
Well, and so on.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question