现在的字典辞书有哪几种编排方式

现在的字典辞书有哪几种编排方式,第1张

在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);

}

}

以上就是关于现在的字典辞书有哪几种编排方式全部的内容,包括:现在的字典辞书有哪几种编排方式、哈夫曼编码出现错误、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10637994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存