Я хочу программно преобразовать строку символов, хранящихся в файле, в строку кодов символов (кодировать), следуя таблице кодов. Затем строка двоичных кодов переходит к файлу, из которого я могу вернуть его обратно в строку символов позже (декодировать). Коды в таблице кодов были сгенерированы с использованием алгоритма Хаффмана, а таблица кодов хранится в файле.Кодировать строку символов с учетом таблицы настраиваемых кодов
Например, следуя кодовую таблицу, где символы и его соответствующие коды одного разнесены так:
E 110
H 001
L 11
O 111
кодирования «HELLO» должен выводиться как «0011101111111» код
Моего C++ не может показаться для завершения кодированной строки. Вот мой код:
int main
{
string English;
ifstream infile("English.txt");
if (!infile.is_open())
{
cout << "Cannot open file.\n";
exit(1);
}
while (!infile.eof())
{
getline (infile,English);
}
infile.close();
cout<<endl;
cout<<"This is the text in the file:"<<endl<<endl;
cout<<English<<endl<<endl;
ofstream codefile("codefile.txt");
ofstream outfile ("compressed.txt");
ifstream codefile_input("codefile.txt");
char ch;
string st;
for (int i=0; i<English.length();)
{
while(!codefile_input.eof())
{
codefile_input >> ch >> st;
if (English[i] == ch)
{
outfile<<st;
cout<<st;
i++;
}
}
}
return 0;
}
Для ввода строки «The_Quick_brown_fox_jumps_over_the_lazy_dog», выход строка 011100110, но оно должно быть больше, чем это!
Пожалуйста, помогите! Я что-то пропустил? (пь мой C++ код не имеет синтаксических ошибок)
Вы пробовали выполнить свой код в отладчике? –
Как вы думаете, что произойдет после того, как вы найдете кодированное значение первого символа в 'codefile.txt', выпишите его, и теперь вам нужно найти кодированное значение второго символа? Ваш 'codefile_input' все еще находится в середине файла, где-то он не собирается волшебно возвращаться к началу файла, чтобы искать кодированное значение второго символа, само по себе. –
+ Сэм так как я могу сделать codefile_input вернуться к началу файла? –