поэтому я пытаюсь сделать простой файловый компрессор / декомпрессор в C ++ (я не стремлюсь к наилучшему возможному результату), но я действительно застрял, потому что у меня много вопросов, вот они:
Какой словарь я должен использовать (я использую карту)?
Какие данные я должен хранить (я использую String / Int в качестве ключа / значения)?
Должен ли я инициализировать словарь с ASCII в нем?
Я видел, что некоторые люди используют узлы, это божественный способ сделать это трудно?
Вот код, пока что это не так много:
#define MAX = 1024 //2^10 Where the dictionary reset
int main(int argc, char *argv[]){
ifstream in(argv[2], ios_base::binary);
ofstream of(argv[3], ios_base::binary);
string str ;
char c;
int i;
if (string(argv[1]) == "-c" ){
map<string,int> Dic;
while (in.get(c))
{
}
in.close();
}
}
Любые комментарии к коду приветствуются!
Ответы следуют из алгоритма, описание можно взять, например, Вот.
1) Вам необходимо постоянно проверять, присутствует ли входная строка. Вам не нужен порядок строк, как обеспечивает std :: map, вы можете использовать std :: unordered_map, который использует хеш и более эффективен.
2) Вы можете использовать строку / без знака int, так как индекс> 0.
3) Да, из описания алгоритма начальный словарь — 256 символов ASCII.
4) Что вы подразумеваете под «узлами»?
Попробуйте реализовать то, что описано в статье. Предоставленный образец может быть модульным тестом.
Других решений пока нет …