我想通過跟隨代碼表以編程方式將存儲在文件中的字符串轉換爲字符代碼(編碼)的字符串。這串二進制代碼應該轉到一個文件中,我可以從這個文件中將它恢復爲稍後的字符串(解碼)。代碼表中的代碼是使用霍夫曼算法生成的,代碼表存儲在一個文件中。給定一個自定義代碼表的字符串編碼
例如,通過下面的一個代碼表,其中的字符和其相應的代碼是單個隔開這樣的:
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,但它應該是長於!
請幫忙!有什麼我錯過了嗎? (NB我的C++代碼有沒有語法錯誤)
你是否嘗試在調試器中逐句通過你的代碼? –
在'codefile.txt'中找到第一個字符的編碼值,寫出來並且現在必須找到第二個字符的編碼值之後,您認爲會發生什麼?你的'codefile_input'仍然在文件的中間,在某個地方,它不會奇蹟般地回到文件的開頭,而是單獨搜索第二個字符的編碼值。 –
+ Sam所以我怎樣才能讓codefile_input回到文件的開頭? –