Форум программистов, компьютерный форум 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 из-за переполнения, но если сравнивать побитово то эти выражения равны! Почему так? подробнее

Показать сообщение отдельно
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
26.06.2013, 10:20
Цитата Сообщение от cflood Посмотреть сообщение
nxtech, да щас туда как раз и влепил это, спасибо

Добавлено через 7 минут
с size-1 кстати неработает
Видимо потому, что вы не правильно вычисляете размер буфера:
C++
1
2
char data[] = {'a','a','a','a','a','c','b','b','c','c','g','k','b','b','b','b'};
int size = sizeof(data)/sizeof(data[0]);
Не учитывается место для завершающего нуля.
Нужно так:
C++
1
int size = sizeof(data)/sizeof(data[0]) + 1;
Но если вы измените size, тогда потребуется корректировка в индексов циклах в функциях encode и decode.

Если у вас размер буфера size, то последний элемент (для Си-строки это завершающий нуль) должен располагаться по индексу size-1. Иначе выход за пределы буфера и UB (неопределенное поведение).

Сейчас проверю

Добавлено через 11 минут
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <stdio.h>
#include <tchar.h>
 
using namespace std;
 
void encode (char mass[], char * out, int size)
{
    int counter = 0;
    int recurring_count = 0;
    for (int i = 0; i < size; i++)
    {
        if (mass[i] != mass[i+1])
        {
            recurring_count++;
            out[counter++] = mass[i];
            out[counter++] = recurring_count+'0';
            recurring_count = 0;
        } else {
            recurring_count++;
        }
    }
}
 
void decode (char mass[], char * out, int size)
{
    int counter = 0;
    for (int i = 0; i < size; i++)
    {
        if (i & 1)
        {
            int num = mass[i]-'0';
            for (int j = 0; j < num; j++) {
                out[counter++] = mass[i-1];
            }
        }
    }
}
 
 
int main ()
{
    char data[] = {'a','a','a','a','a','c','b','b','c','c','g','k','b','b','b','b'};
    int size = sizeof(data)/sizeof(data[0]);
 
    // Выделяем буферы с учетом места для завершающего нуля.
    char * encode_out = new char[size + 1]();
    char * decode_out = new char[size + 1]();
 
    // Добавляем в конце буферов завершающие нули.
    encode_out[size] = '\0';
    decode_out[size] = '\0';
 
    encode(data, encode_out, size);
    cout << encode_out;
    cout << "\n";
    decode(encode_out, decode_out, size);
    cout << decode_out;
 
    int wait;
    cin >> wait;
 
    delete[] encode_out;
    delete[] decode_out;
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru