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

Алгоритм сжатия. BWT преобразование и компрессор - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дан одномерный массив A (n) подсчитать кол-во не совершенных чисел в нём (совершенные = сумме своих делителей http://www.cyberforum.ru/cpp-beginners/thread1044216.html
Дан одномерный массив A (n) подсчитать кол-во не совершенных чисел в нём (совершенные = сумме своих делителей)
C++ Производный класс Доброго времени суток) Помогите реализовать производный класс Vector, который сможет переписать двумерный массив в одномерный и напечатать его. И еще вопрос: как в конструкторе написать значения по... http://www.cyberforum.ru/cpp-beginners/thread1044190.html
C++ Найти число с данного промежутка, равное кубу суммы всех своих цифр. Например, 512 = (5 +1 +2) 3
Найти число с данного промежутка, равное кубу суммы всех своих цифр. Например, 512 = (5 +1 +2) 3
Любая ваша программа C++
Добрый вечер, форумчане, нуждаюсь в вашей помощи. Суть в том, что мне нужна абсолютно любая простая(консольная) наглядно работающая и выполняющая свою задачу программа. Будь то что-угодно, сойдёт...
C++ Определить, сколько раз в заданном предложении встретится одинаковая буква http://www.cyberforum.ru/cpp-beginners/thread1044141.html
Определить, сколько раз в заданном предложении встретится одинаковая первая буква в словах. Напечатать исходный текст и число сочетаний. Нужно срочно , помогите
C++ Решение СЛОУ методом Гаусса с выбором главного элемента по строке Задание:Решение СЛОУ методом Гаусса с выбором главного элемента по строке.Для тестирования решить систему. Запускается,но вывод получается жуткий,даже проверить тяжело,как поправить бы,пожалуйста)... подробнее

Показать сообщение отдельно
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37

Алгоритм сжатия. BWT преобразование и компрессор - C++

16.12.2013, 19:20. Просмотров 906. Ответов 0
Метки (Все метки)

Некорректо работает декодирование,хотя должно быть все нормально,кто заметил ошибку прошу подсказать))
Декодирование с 56 строчки
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <string.h>
#include <conio.h>
 
using namespace std;
 
bool searchKey(string &str,string &str2, int k) {
    for (int i = 0; i < k; i++) {
        if (str[i] != str2[i]) {
            return false;
        }
    }
    return true;
}
 
void code(string &str, int key) {
    int size = str.size();
    string *s = new string[size];
    string answer = "";
    string test = "";
    for (int i = 0; i < size; i++) {
        s[i] = "";
        for (int j = 0; j < size - 1 - i; j++) {
            s[i] += str[i + 1 + j];
        }
        for (int j = 0; j < 1 + i; j++) {
            s[i] += str[j];
        }
    }
    for(int i = 0 ; i < size; i++) { 
       for(int j = 0 ; j < size - i - 1; j++) {  
           if(s[j] > s[j+1]) {           
                string tmp= "";
                tmp += s[j]; 
                s[j] = s[j+1]; 
                s[j+1] = tmp; 
            }
        }
    }
    for (int i = 0; i < size; i++) {
        if (searchKey(s[i], str, size)) {
            key = i;
            break;
        }
    }
    for(int i = 0 ; i < size; i++) {          
        answer += s[i][size-1];
    }
    str = answer;
    cout << "Key:" << key;
}
 
void decode(string &str) {
    int key = 0;
    cout << "\nInput key\n";
    cin >> key;
    string answer = "";
    int size = str.size();
    int *data = new int[size];
    for(int i = 0 ; i < size; i++) {
        data[i] = i;
    }
    string *s = new string[size];
    for (int i = 0; i < size; i++) {
        s[i] = "";
        s[i] += str[i];
    }
    for(int i = 0 ; i < size; i++) { 
       for(int j = 0 ; j < size - i - 1; j++) {  
           if(s[j] > s[j+1]) {           
              string tmp= "";
              tmp += s[j]; 
              s[j] = s[j+1]; 
              s[j+1] = tmp; 
              int w = data[j];
              data[j] = data[j+1];
              data[j+1] =w;
           }
        }
    }
    int *array = new int[size];
    array[0] = data[key];
    for(int i = 1; i < size; i++) {
        array[i] = data[array[i-1]];
    }
    for(int i = 0; i < size; i++) {
        answer += str[array[i]];
    }
    str = answer;
}
 
 
void processFile(string infileName, string outFileName) {
    ifstream ifs(infileName.c_str());
    if (ifs.is_open() == false) {
        return;
    }
    ofstream ofs(outFileName.c_str());
    if (ofs.is_open() == false) {
        ifs.close();
        return;
    }
    string curLine; 
    getline(ifs, curLine);
    cout << "Code or decode?\nIf code, input 1\nIf decode, input 2\n";
    int check;
    cin >> check;
    int key = 0;
    if (check == 1) {
        code(curLine, key);
    }
    else if (check == 2) {
        decode(curLine);
    }
    else {
        return;
    }
    ofs << curLine << "\n"; 
    ifs.close();
    ofs.close();
}
 
int main(int argc, char* argv[]) {
    processFile("C://labin.txt", "C://labout.txt");
    cout << "Press any key to exit";
    _getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru