2014-09-29 5 views
0

Я реализовал компрессор LZW, который кодирует строки в целые числа с помощью хэш-функции. Я сохранил закодированную строку в текстовом файле. Теперь мне нужно разложить тот же код. Я смущен, как различать двухзначное целое и однозначное целое число при чтении из текстового файла.Чтение целых чисел из файла C++

Например, мой словарь:

0 c 
1 bba 
3 aa 
5 ac 
7 bb 
8 aab 
9 a 
10 b 

и так далее.

Теперь предположим, что я закодировал строку «aaabbbac» в «9 3 10 7 9 0», которая хранится в текстовом файле как 9310790. Как отличить 0, 1 и 10 при чтении из файла?

+0

Если они хранятся именно так (а не в двоичном виде с каждым как байт), то вы не можете отличить без разделителя. – matsjoyce

+1

Почему вы не храните их как фактические целые числа (а не строку, представляющую целое число) – Borgleader

+2

Обычно в программе сжатия вы не пишете текст и не записываете двоичные байты, вы пишете поток * бит * (ваши границы кода делают не падать на границы байтов). Битовая ширина следующего значения для считывания определяется состоянием декодера. –

ответ

0

Некоторые опции:

  • Хранить их в двоичном формате, а не в текстовом формате. Это может быть проблемой для чтения и записи, но это может быть полезно для обучения. Проблема в том, что если вы хотите визуализировать номера с помощью текстового редактора, но вы можете найти инструмент для визуализации двоичных файлов. Предполагая, что 2 байта на целое число (введите короткий), ваш пример будет в шестнадцатеричном виде (не считая endian): 00 09 00 03 00 0a 00 07 00 09 00 00

  • Храните их с фиксированной длиной на номер. Пример: printf («% 03d», number) всегда будет создавать числа с 3 цифрами. Ваш пример будет: 009003010007009000

  • Используйте запятую или точку с запятой разделитель: 9,3,10,7,9,0

Смежные вопросы