@Sazoks

Алгоритм сжатия RLE?

Всем привет! Наткнулся на интересную задачку: алгоритм сжатия RLE.
Суть задачи в том, что пользователь вводит строку, а программа выводит ту же строку, но вместо повторяющихся символов выводит их кол-во. Я пока рукожоп, но мне нужна объективная оценка того, что я сделал. Я буду ОЧЕНЬ благодарен любой критике. Собсна, вот код:
#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;
}


Результаты работы программы:
1) ввод: aaaaabbcccd
вывод: a5b2c3d
2) ввод: qqiipekkk;;;
вывод: q2i2pek3;3

Ну и заранее спасибо и добра вам! ^_^
  • Вопрос задан
  • 1878 просмотров
Пригласить эксперта
Ответы на вопрос 1
h0w4rd
@h0w4rd
Python dev.
А если будет больше 9-ти одинаковых символов подряд? "a11" Это одна "а" и 1? Или 11 "а"?
А если "абв1", это "абв" или "абв1"?
Ну и так далее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы