ファイルに格納された文字列をコードテーブルの次の文字列(エンコード)にプログラムで変換したい。バイナリコードの文字列はファイルに移動し、後で文字列に戻すことができます(デコード)。コードテーブルのコードは、ハフマンアルゴリズムを使用して生成され、コードテーブルはファイルに格納されます。カスタムコードテーブルを指定して文字列をエンコードする
E 110
H 001
L 11
O 111
エンコーディング「HELLO」「0011101111111」
マイC++コードとして出力することができないようすべきである。例えば、文字及びその対応するコードはこのように離間単一であるコードテーブルを以下により
エンコードされた文字列を完成させます。ここに私のコードは次のとおりです。「The_Quick_brown_fox_jumps_over_the_lazy_dog」の入力文字列の場合
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;
}
、出力文字列は011100110ですが、それはそれよりも長くする必要があります!
助けてください!私が逃したものはありますか? (私のC++コードに構文エラーがないNB)
デバッガでコードをステップ実行しようとしましたか? –
最初の文字の符号化された値を 'codefile.txt'で見つけてそれを書き出した後、2番目の文字の符号化された値を見つけなければならないと思いますか?あなたの 'codefile_input'はまだファイルの途中にあります。どこかで、魔法のようにファイルの先頭に戻って2番目の文字のエンコードされた値をすべて検索しません。 –
+ Samだから私はcodefile_inputをファイルの先頭に戻すにはどうすればいいですか? –