在1925年之后,部分中文字典开始使用由王云五发明的四角号码检字法,而大部分现代汉语字典的字词却跟据普通话音标来排列的。辞书的基本单元是“词条”“词条”的编排组织方法。
以字带词(以统领字带出一系列的包含了该单字的语词词条(被统领词)),因统领关系,而产生了:正序词典——统领字与被统领词词头相同;逆序词典——统领字与被统领词词尾相同;构词词典——统领字与被统领词位置不固定。
扩展资料
字典与词典从功用划分可分为语文字典与词典(如《新华字典》《现代汉语词典》《成语词典》)、学科(百科)词典(如:《政治经济学词典》、专名词典(如人名词典、地名词典等)。
按照规模可划分为:大、中、小;按照释词方法可划分为:描写型、规范型;按照收词时限可划分为:历时性、共时性;按照载体可划分为:印刷版、电子版、网络版。
中文字是表意文字,排列方式正是根据部首。部首在许慎创立时,共有540个,后来不断归纳淘汰,《辞源》中的部首只剩下240余个,到了《汉语大词典》只有200余个。
参考资料来源:百度百科-字典
参考资料来源:百度百科-辞书
这是我们的作业题,自己写 的……(可能输入的格式跟你要的不一致,自己改一下)
如果有什么不懂的就问我,我可以把其中所有相关的文件发给你 ^^
注:1、 初始化创建哈夫曼树有三种选择,其中选择编译课本测试数据时和编译源文件是,调用的输入文件分别是:testtxt和inputtxt;字母的哈夫曼编码都保存在文件:hmfTreetxt;
2、 用户自定义模式下,需要编码的文件内容保存在ToBeTrantxt中;课本测试数据和源文件代码分别保存在coursetxt和sorsetxt中,在(1)中选择不同的选项,则在编码时调用相应的文件进行编码,编码结果保存在文件CodeFiletxt中。
3、 文件译码时,调用文件CodeFiletxt进行译码,得到的结果保存在文件TextFiletxt中。
4、 打印代码文件:调用CodeFiletxt,结果显示在终端并保存在文件CodePrintxt中。
5、 打印哈夫曼树:用凹入表形式把哈夫曼树显示在终端,同时将它保存在文件TreePrinttxt中。
#include <stdioh>
#include<malloch>
#include <stringh>
#include<fstream>
#include<iostream>
using namespace std;
typedef struct {
unsigned int weight;
char ch1;
unsigned int parent,lchild,rchild;
}HTNode,HuffmanTree;
typedef char HuffmanCode;
typedef struct {
char ch;
char code[7];
}codenode,code;
void select(HuffmanTree HT,int n,int & s1,int &s2){ //从哈夫曼树中选择出最小的两个节点
for(int i=1;i<=n;i++)
if(!HT[i]parent){
s1=i; break;
}
for(i++;i<=n;i++)
if(!HT[i]parent){
s2=i; break;
}
if(HT[s1]weight-HT[s2]weight){
int temp; temp=s1; s1=s2; s2=temp;
}
for(i=1;i<=n;i++) //对数组进行遍历,寻找最小的两个节点
if(!HT[i]parent){
if(HT[i]weight<HT[s1]weight){
s2=s1; s1=i;
}
else if(HT[i]weight<HT[s2]weight&&i!=s1)
s2=i;
}
}
void prin(){ //终端输出选择菜单
cout<<"----------------------------------------------------\n\n"
<<" ∣ I---创建哈夫曼树 ∣\n"
<<" ∣ ∣\n"
<<" ∣ E---文件编码 ∣\n"
<<" ∣ ∣\n"
<<" ∣ D---文件译码 ∣\n"
<<" ∣ ∣\n"
<<" ∣ P---打印代码文件 ∣\n"
<<" ∣ ∣\n"
<<" ∣ T---印哈夫曼树 ∣\n"
<<" ∣ ∣\n"
<<" ∣ O---哈夫曼树的存储结构 ∣\n"
<<" ∣ ∣\n"
<<" ∣ Q---退出 ∣\n"
<<"\n-----------------------------------------------------\n\n";
printf("选择菜单功能选项:");
}
void output (HuffmanTree th,int n){ //输出哈夫曼树的存储结构
int i=0;
cout<<"序号"<<" "<<"字符"<<" "<<"双亲"<<" "<<"左孩子"<<" "<<"右孩子"<<" "<<"权值"<<endl;
for(;i<2n-1;i++){
th++;
cout<<i<<" "<<th->ch1<<" "<<th->parent<<" "<<th->lchild<<" "<<th->rchild<<" "<<th->weight <<endl;
}
}
void initial(HuffmanTree &HT,HuffmanCode &HC,int w[],int &n,char ch[],int &k){ //创建哈夫曼树
cout<<"----------------------------------------------------\n\n"
<<" ∣ 1---自定义 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 2---编码课本测试数据 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 3---编码源程序 ∣\n"
<<"\n-----------------------------------------------------\n\n";
printf("选择菜单功能选项:");
scanf("%d",&k);
if(k==1){
printf("输入需要编码的字符总数: ");
scanf("%d",&n);
printf("\n输入需要编码字符的权值:\n");
for(int d=0;d<n;d++) {
scanf("%d",&w[d]);
}
printf("\n输入需要编码的字符串: ");
scanf("%s",ch);
}
else if(k==2){
ifstream fin2 ("testtxt");
fin2>>n;
for(int d=0;d<n;d++)
fin2>>w[d];
fin2>>ch;
fin2close();
}
else if(k==3){
ifstream fin1 ("inputtxt");
fin1>>n;
for(int d=0;d<n;d++)
fin1>>w[d];
fin1>>ch;
fin1close();
}
if(n<=1)
return;
int s1,s2,i,num=2n-1;
HuffmanTree p;
HT=(HuffmanTree)malloc((num+1)sizeof(HTNode));
for(p=HT+1,i=1;i<=n;i++,p++){
p->weight=w[i-1]; p->lchild=0; p->parent=0; p->rchild=0; p->ch1 =ch[i-1];
}
for(;i<=num;p++,i++){
p->weight=0; p->lchild=0; p->parent=0; p->rchild=0; p->ch1 ='$';
}
for(i=n+1;i<=num;i++){
select(HT,i-1,s1,s2);
HT[s1]parent=i; HT[s2]parent=i; HT[i]lchild=s1;
HT[i]rchild=s2; HT[i]weight=HT[s1]weight+HT[s2]weight;
}
HC=(HuffmanCode)malloc((n+1)sizeof(char ));
char temp=(char )malloc(nsizeof(char));
temp[n-1]='\0';
for(i=1;i<=n;i++){
int start=n-1;
for(int f=HT[i]parent,h=i;f;h=f,f=HT[f]parent)
if(HT[f]lchild==h)
temp[--start]='0';
else
temp[--start]='1';
HC[i]=(char )malloc((n-start)sizeof(char));
strcpy(HC[i],&temp[start]);
}
ofstream fout ("hfmTreetxt");
fout<<ch<<endl;
for(int j=1;j<=n;j++)
fout<<HC[j]<<endl;
foutclose();
free(temp);
}
void encoding(int n,int select){ //编码:对文件TobeTrantxt进行译码
char a[100],b[100][20];
ifstream fin ("hfmTreetxt");
fin>>a;
for(int j=0;j<n;j++) fin>>b[j];
finclose();
ifstream fin1 ("coursetxt");
ifstream fin2 ("sorsetxt");
ifstream fin3 ("ToBeTrantxt");
char s[1000];
if(select==3)
fin2>>s;
else if(select==2)
fin1>>s;
else fin3>>s;
ofstream fout ("CodeFiletxt");
while(s[0]!='\0'){
for(int i=0;s[i]!='\n'&&s[i]!='\0'&&i<30;i++ ){
for(int g=0;a[g]!=s[i];g++) ;
fout<<b[g];
}
fout<<'\n';
if(select==3)
fin2>>s;
else if(select==2)
fin1>>s;
else fin3>>s;
}
fin3close();
fin2close();
fin1close();
foutclose();
}
void decoding(HuffmanTree ht,int n){ //译码:对CodeFiletxt文件进行译码
ifstream fin ("CodeFiletxt");
ofstream fout ("TextFiletxt");
char s[500];
fin>>s;
HuffmanTree head=ht+2n-1;
int i=0;
while(s[0]!='\0'){
while(s[i]!='\0'){
if(s[i]=='1') head=ht+head->rchild;
else if(s[i]=='0') head=ht+head->lchild;
if((head->lchild)==0&&(head->rchild) ==0) {
fout<<(head->ch1);
head=ht+2n-1;
}
i++;
}
fout<<' ' ;
i=0;
fin>>s;
}
finclose();
foutclose();
}
void Print(){ //打印代码文件,显示在终端,每行50个代码
ifstream fin ("CodeFiletxt");
char s[2000];
int j=0;
int i=1;
fin>>s;
ofstream fout ("CodePrintxt");
while(s[0]!='\0'){
for(;s[j]!='\0';j++){
printf("%c",s[j]);
fout<<s[j];
if(i%50==0){
fout<<endl;
printf("\n");
}
i++;
}
j=0;
fin>>s;
}
finclose();
printf("\n");
foutclose();
}
void printTree( HuffmanTree node,HuffmanTree node1, int level ) { //打印哈夫曼树形(在参数的传递上,是文科给自己提出的意见才很好的解决了之后的 *** 作难题^^)
if( node == NULL ) return;
if( node1->rchild!=0) {
printTree( node,node+node1->rchild, level + 1 );
}
fstream fout ;
foutopen ("TreePrinttxt",ios::in | ios::out|ios::ate);//这个挺有用的:在文件末尾加入内容
for( int i = 0; i < level; i++ ) {
fout<<"|……";
printf( "……");
}
fout<<node1->weight<<endl;
printf( "%d\n", node1->weight );
if( node1->lchild!=0 ) {
printTree( node,node+node1->lchild, level + 1 );
}
foutclose();
}
void main(){
int select;
int n;
char ch[100];
int w[100];
HuffmanTree HT=NULL;
HuffmanCode hc=NULL;
prin();
char c='I';
scanf("%c",&c);
while(c!='Q'){
switch(c){
case 'I':
initial(HT,hc,w,n,ch,select);
prin();
break;
case 'E':
encoding(n,select);
prin();
break;
case 'D':
decoding(HT,n);
prin();
break;
case 'P':
Print();
prin();
break;
case 'T':
printTree(HT,HT+2n-1,1);
prin();
break;
case 'O':
output(HT,n);
prin();
break;
}
scanf("%c",&c);
}
}
以上就是关于现在的字典辞书有哪几种编排方式全部的内容,包括:现在的字典辞书有哪几种编排方式、哈夫曼编码出现错误、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)