Форум программистов, компьютерный форум CyberForum.ru

Реализация алгоритма RLE - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что делает следующий код программы? http://www.cyberforum.ru/cpp-beginners/thread911817.html
Что делает следующий код программы: Int i; Int j; For(j=0; j<10; j++) {i=j;}
C++ библиотека openVC Здравствуйте не могу поставить на убунту 13 библиотеку openVC, вот мануал http://karytech.blogspot.ru/2012/05/opencv-24-on-ubuntu-1204.html выдает ошибку когда ввожу команду make root@Mozart:~/Загрузки/OpenCV-2.4.0# make Building NVCC (Device) object modules/core/CMakeFiles/cuda_compile.dir/src/cuda/./cuda_compile_generated_matrix_operations.cu.o In file included from... http://www.cyberforum.ru/cpp-beginners/thread911782.html
C++ подскажите какой ответ получится,не могу запустить!
#include"stdafx.h" #include<iostream> using namespace std; int main() { int x,y; x=1; y=50; y=y%x-89; if (y==0) {cout<<y+99;}
Генерация сочетаний C++
Всем привет. Давеча решал вот эту задачку на генерацию сочетаний, казалось бы ничего сложного. Сперва решил делать рекурсией. вот решение #include <iostream> using namespace std; int k,n;
C++ Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала http://www.cyberforum.ru/cpp-beginners/thread911728.html
Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала.
C++ Оператор == char ch = 255; if(ch==255) cout<<"Hello!"; Почему условие выдаёт false? Понятно что ch в данном случае равно -1 из-за переполнения, но если сравнивать побитово то эти выражения равны! Почему так? подробнее

Показать сообщение отдельно
cflood
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 37
25.06.2013, 19:31     Реализация алгоритма RLE
Есть задачка, надо реализовать две функции "закодировать" и "раскодировать" массив данных типа:

C++
1
char mass[] = {'a','a','a','a','c','b','b','k','b','b','b','b'};
В итоге нужно получить букву и количество её повторений, реализовать так сказать сжатие, например:

C++
1
{'a4','c1','b2','k1','b4'}
С С++ я работаю всего третий день, по этому многое еще непонятно, однако задача можно сказать реализована на 50%, получилось посчитать количество повторений у каждой из букв:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <stdio.h>
#include <tchar.h>
 
using namespace std;
 
void encode (char mass[], int size)
{
        int counter = 0;
        int recurring_count = 0;
        for (int i = 0; i < size; i++)
        {
            if (mass[i] != mass[i+1])
            {
                recurring_count++;
                cout << mass[i] << recurring_count; // вывод буквы и количества её повторений
                recurring_count = 0;
            } else {
                recurring_count++;
            }
        }
}
 
 
int main ()
{
        char data[] = {'a','a','a','a','c','b','b','k','b','b','b','b'};
        int size = sizeof(data)/sizeof(data[0]);
 
        encode(data, size);
        
        int wait;
        cin >> wait;
}
Проблему вызывает именно запись полученных данных в удобноиспользуемую форму, потому что mass[i] - char, а recurring_count - int.

Например на том же Javascript задачу удалось реализовать полностью за пару минут, с с++ мучаюсь второй день:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<script>
 
function encode(data) {
    var recurring_count = 0;
    var encoded_mass = [];
    for (var i = 0; i < data.length; i++) {
        if (data[i] != data[i+1]) {
            recurring_count++;
            encoded_mass.push(data[i]+'.'+recurring_count); // как раз то место где в C++ использую для вывода cout
            recurring_count = 0;
        } else {
            recurring_count++;
        }
    }
    return encoded_mass;
}
 
function decode(data) {
    var decode_mass = [];
    for (var i = 0; i < data.length; i++) {
        var temp = data[i].split('.');
        
        for (var j = 0; j < temp[1]; j++) {
            decode_mass.push(temp[0]);
        }
    }
    return decode_mass;
 
}
 
var mass = ['a','a','a','a','c','b','b','k','b','b','b','b'];
var encode_result = encode(mass);
var decode_result = decode(encode_result);
alert(encode_result);
alert(decode_result);
 
</script>
Получается в функции encode на выходе мы имеем массив вида:
Код
буква.количество_повторений
буква.количество_повторений
буква.количество_повторений
буква.количество_повторений
Потом в decode разбиваем его при помощи split по символу "." и получаем массив где первый элемент буква, а второй количество повторений, ну и делаем из всего этого нужный нам первоначальный массив вида

Код
{'a','a','a','a','c','b','b','k','b','b','b','b'}
Подскажите пожалуйста как можно реализовать аналогичную задачу на C++.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru