grazie mille, allora il codice completo è questo:
codice:
#pragma once
#include <map>
#include <vector>
#include <string>
using namespace std;
struct lz78 {
private:
/* massimo numero di elementi memorizzabili nel dizionario */
size_t _max_dict;
size_t _max_bits;
size_t _num_dict;
/* definisce il look-ahead dell'algoritmo */
vector <pair<size_t, uint8_t>> _tuple;
vector <uint8_t> _buffer;
/* dizionario */
map <string, size_t> _dict;
public:
lz78(size_t max_bits, ifstream & is) :
_max_bits(max_bits){
_num_dict = 0;
_max_dict = 1 << max_bits;
cout << "max_bits: " << _max_bits << endl;
cout << "max_dict: " << _max_dict << endl;
uint8_t buff;
while (is.read(reinterpret_cast<char *>(&buff), 1)) {
_buffer.push_back(buff);
}
}
void encode() {
string enc;
string enc_save;
while (_buffer.size()) {
enc = _buffer.front();
_buffer.erase(_buffer.begin());
if (_dict.find(enc) == _dict.end()) {
while (true) {
enc_save = enc;
enc += _buffer.front();
break;
}
}
}
}
};
codice:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstdint>
#include "lz78.h"
using namespace std;
int main(int argc, char **argv) {
ifstream is(argv[2], ios::binary);
ofstream os(argv[3], ios::binary);
lz78 lz78_enc = lz78(atoi(argv[1]), is);
lz78_enc.encode();
is.close();
os.close();
system("pause");
return EXIT_SUCCESS;
}
mentre come compilatore utilizzo quello di visual studio