谁能用大白话给我讲解下这段代码
voidEncoding(){cout<<"下面对目录下文件tobetran.txt中的字符进行编码"<<endl;FILE*tobetran,*codefile;if(...
void Encoding()
{
cout<<"下面对目录下文件tobetran.txt中的字符进行编码"<<endl;
FILE *tobetran,*codefile;
if((tobetran=fopen("tobetran.txt","rb"))==NULL)
{
cout<<"不能打开文件"<<endl;
}
if((codefile=fopen("codefile.txt","wb"))==NULL)
{
cout<<"不能打开文件"<<endl;
}
char *tran;
i=99;
tran=(char*)malloc(100*sizeof(char));
while(i==99)
{
if(fgets(tran,100,tobetran)==NULL)
{
cout<<"不能打开文件"<<endl;
break;
}
for(i=0;*(tran+i)!='\0';i++)
{
for(j=0;j<=n;j++)
{
if(*(z+j-1)==*(tran+i))
{
fputs(HC[j],codefile);
if(j>n)
{
cout<<"字符错误,无法编码!"<<endl;
break;
}
}
}
}
}
cout<<"编码工作完成"<<endl<<"编码写入目录下的codefile.txt中"<<endl<<endl;
fclose(tobetran);
fclose(codefile);
free(tran);
}
这是哈夫曼编码器的一段代码,老师要我讲解,可我一点不会,求解释。 展开
{
cout<<"下面对目录下文件tobetran.txt中的字符进行编码"<<endl;
FILE *tobetran,*codefile;
if((tobetran=fopen("tobetran.txt","rb"))==NULL)
{
cout<<"不能打开文件"<<endl;
}
if((codefile=fopen("codefile.txt","wb"))==NULL)
{
cout<<"不能打开文件"<<endl;
}
char *tran;
i=99;
tran=(char*)malloc(100*sizeof(char));
while(i==99)
{
if(fgets(tran,100,tobetran)==NULL)
{
cout<<"不能打开文件"<<endl;
break;
}
for(i=0;*(tran+i)!='\0';i++)
{
for(j=0;j<=n;j++)
{
if(*(z+j-1)==*(tran+i))
{
fputs(HC[j],codefile);
if(j>n)
{
cout<<"字符错误,无法编码!"<<endl;
break;
}
}
}
}
}
cout<<"编码工作完成"<<endl<<"编码写入目录下的codefile.txt中"<<endl<<endl;
fclose(tobetran);
fclose(codefile);
free(tran);
}
这是哈夫曼编码器的一段代码,老师要我讲解,可我一点不会,求解释。 展开
1个回答
展开全部
void Encoding()
{
cout<<"下面对目录下文件tobetran.txt中的字符进行编码"<<endl;
//提示信息
FILE *tobetran,*codefile;
//定义了两个文件指针
if((tobetran=fopen("tobetran.txt","rb"))==NULL) //调用打开文件函数,打开方式为二进制读取,若不成功,函数会返回NULL,如果返回NULL,说明打开失败,下一行给出提示
{
cout<<"不能打开文件"<<endl;
}
if((codefile=fopen("codefile.txt","wb"))==NULL)//同上,只是这里打开方式为二进制写入
{
cout<<"不能打开文件"<<endl;
}
char *tran; //定义了一个字符串指针
i=99;
tran=(char*)malloc(100*sizeof(char)); //为字符串指针分配字符串空间,指针指向字符串首地址
while(i==99)
{
if(fgets(tran,100,tobetran)==NULL) //调用fgets从tobetran指向的文件中读取一行,如果失败,返回NULL,如果返回NULL说明读取失败,下面给出提示信息,并结束循环。
{
cout<<"不能打开文件"<<endl;
break;
}
for(i=0;*(tran+i)!='\0';i++) //挨个读取tran字符串中的字符,知道读到字符串结尾标志'\0'
{
for(j=0;j<=n;j++) //j为地址增量
{
if(*(z+j-1)==*(tran+i)) //将读取到的tran字符串中的某个字符与z中的字符挨个比较,如果符合,接下一行
{
fputs(HC[j],codefile);//则往codefile中写入这个字符对应的编码
if(j>n) //如果在z所指向的字符串中查找了n个还没有匹配到,说明z中不存在tran+i这个字符,提示字符错误,无法编码,循环结束。
{
cout<<"字符错误,无法编码!"<<endl;
break;
}
}
}
}
}
cout<<"编码工作完成"<<endl<<"编码写入目录下的codefile.txt中"<<endl<<endl;
fclose(tobetran); //关闭文件,下同
fclose(codefile);
free(tran); //释放tran所指的字符串空间
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询