코드 테이블을 따라 파일에 저장된 문자 문자열을 문자 코드 문자열 (프로그래밍 코드)로 프로그래밍 방식으로 변환하려고합니다. 바이너리 코드 문자열은 파일로 이동해야하는데, 나중에이 파일을 다시 캐릭터 라인으로 되돌릴 수 있습니다 (디코딩). 코드 테이블의 코드는 허프만 알고리즘을 사용하여 생성되었으며 코드 테이블은 파일에 저장됩니다.사용자 지정 코드 테이블이 지정된 문자열 인코딩
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;
}
는, 출력 문자열은 011,100,110입니다,하지만 그것은 더 이상보다해야합니다!
도와주세요! 내가 놓친 것이 있습니까? 다음 codefile_input
을 통해 한 번 읽어
for (int i=0; i<English.length();)
{
while(!codefile_input.eof())
{
codefile_input >> ch >> st;
if (English[i] == ch)
{
outfile<<st;
cout<<st;
i++;
}
}
}
귀하의 코드 것이고, :
디버거에서 코드를 단계별로 실행 해 보았습니까? –
첫 번째 문자의 인코딩 된 값을'codefile.txt'에서 찾은 후 그것을 써내고 두 번째 문자의 인코딩 된 값을 찾아야한다고 생각하십니까? 당신의'codefile_input'은 여전히 파일의 중간에 있고 어딘가에 두번째 문자의 인코딩 된 값을 찾기 위해 마술처럼 파일의 처음으로 돌아 가지 않을 것입니다. –
+ Sam 그래서 codefile_input을 어떻게 파일의 시작 부분으로 되돌릴 수 있습니까? –