基于GTK的拼音输入法Word下载.docx
《基于GTK的拼音输入法Word下载.docx》由会员分享,可在线阅读,更多相关《基于GTK的拼音输入法Word下载.docx(39页珍藏版)》请在冰豆网上搜索。
//label显示用的变量
charlabel_swap[30];
charentry_buffer[100];
GtkWidget*entry_all;
GtkWidget*label_py,*label_cn,*label_yx;
structchinese_container
{
charlabel[2];
charpy[8];
charch[3];
}s;
structChinese_data
chardata[4];
//存放的一个字
intFrequency;
//使用的频度
structChinese_data*next;
//指向下一个字
//structChinese_data*pre;
//指向前一个字
structword
chardata[20];
structword*next;
structElement
charElementType;
//元素的类型
structChinese_data*ch;
//存放数据(汉子)
structElement*Father;
//父指针
intOld_new;
//是新的还是旧的词
intIsword;
//判断是字还是词
structElement*letter[26];
//孩子指针
structword*ci;
//词的指针
structElement*pointer=NULL;
structElement*p_element=NULL;
structElement*father=NULL;
structChinese_data*pointer_ch=NULL;
structChinese_data*pu=NULL;
structword*pointer_ci,*pi;
/*******************************************************************
函数名:
creat_node_data;
输入参数:
void;
输出:
void;
功能:
开辟汉字的存储空间;
********************************************************************/
structChinese_data*creat_node_data(void)
structChinese_data*c;
c=(structChinese_data*)malloc(sizeof(structChinese_data));
returnc;
}
creat_node_word;
开辟词的存储空间,
structword*creat_node_word(void)
structword*c;
c=(structword*)malloc(sizeof(structword));
creat_node;
开辟链表的存储空间,
structElement*creat_node(void)
structElement*b;
b=(structElement*)malloc(sizeof(structElement));
returnb;
bl;
structElement*head;
对输入的链表进行遍历输出,按照汉子表的形式输出,
voidbl(structElement*head)
//等深度遍历函数
inti,j,k;
structChinese_data*ph;
structElement*pe;
structword*pi;
charpiny[8],piy[8];
charci_piny[20],ci_piy[20];
piny[0]='
\0'
;
piy[0]='
for(i=0;
i<
26;
i++)
if(head->
letter[i])
{
head=head->
letter[i];
ch!
=NULL)
//可以在底下一级插入排序函数即为遍历排序或者插入释放类存的语句!
ph=head->
ch;
pe=head;
j=0;
while(pe->
ElementType)
//得到的倒序拼音
sprintf(&
piny[j],"
%c"
pe->
ElementType);
pe=pe->
Father;
j++;
}
for(k=0;
k<
j;
k++)
//再倒序排列
{
//
piy[k]=piny[j-k-1];
}
//
while(j<
8)
piy[j]='
\40'
//这部分取得拼音,且补上空格!
for(k=0;
k++)
if(piy[0]==T[k])
printf("
%c"
TT[k]);
//打印出大写字母标志
%s"
piy);
//打印出拼音
pe=NULL;
while(ph!
=NULL)
ph->
data);
//打印拼音之后的字
ph=ph->
next;
\n"
);
//打印换行符号,即拼音后面的汉子结束了。
ph=NULL;
//清空指针
ci!
ci_piny[j],"
//再倒序排列
ci_piy[k]=ci_piny[j-k-1];
ci_piy[j]='
//printf("
%s\n"
ci_piy);
if(ci_piy[0]==T[k])
//打印出大写字母标志
T[2]);
pi=head->
ci;
while(pi!
pi->
pi=pi->
pi=NULL;
bl(head);
order;
structElement*Head;
对输入的链表结构里面有词的节点按照使用频度值进行排序,排序完毕后,将排序完的
表头赋值给输入的指针;
voidorder(structElement*Head)/*排序函数*/
structwordsh;
structword*head;
sh.next=Head->
head=&
sh;
structword*temp=NULL;
//默认为NULL,也就是链表的结尾
structword*ptr1=head;
structword*ptr2=head->
while(ptr1->
next!
=temp)//(ptr1!
=NULL)
while(ptr2->
=temp)//(ptr2!
{
if(ptr1->
next->
Frequency<
ptr2->
Frequency)//(ptr1->
score>
score)
{//交换ptr1->
link和ptr2->
link
ptr1->
next=ptr2->
//temp->
link=ptr2;
next=ptr2;
//ptr2->
link=ptr1;
}
ptr1=ptr1->
//ptr2=ptr2->
link;
ptr2=ptr1->
//从上面移动下来的
temp=ptr2;
//新加的
ptr1=head;
//ptr1=ptr1->
head=head->
Head->
ci=head;
sort;
对输入的链表结构里面有字的节点按照使用频度值进行排序,排序完毕后,将排序完的
voidsort(structElement*Head)/*排序函数*/
structChinese_datash;
structChinese_data*head;
structChinese_data*temp=NULL;
structChinese_data*ptr1=head;
structChinese_data*ptr2=head->
ch=head;
blpx;
用字,词的排序函数来实现整个链表的频度排序;
voidblpx(structElement*head)
//遍历排序总体的
structChinese_data*p_ch;
//structElement*pe;
//blpx(head);
sort(head);
//对这一级的汉子排序
Isword)
order(head);
blpx(head);
blw;
对输入的链表进行回写,将链表节点的字,词写入文件中;
voidblw(structElement*head)
FILE*w_file;
charc_piny[20],c_piy[20];
char*space="
"
char*enter="
//blw(head);
//strncpy(&
piny[j],&
(pe->
ElementType),1);
//printf("
//大写字母
w_file=fopen("
dx"
"
a+b"
fwrite(&
TT[k],sizeof(char),1,w_file);
//写大写字母标记位置!
fwrite(space,sizeof(char),1,w_file);
//大写字母+空格
fclose(w_file);
fwrite(piy,sizeof(char),8,w_file);
//写入拼音
while(ph)
//拼音之后的字
fwrite(ph->
data,sizeof(char),3,w_file);
fwrite(enter,sizeof(char),strlen(enter),w_file);
//写换行
c_piny[j],"
c_piy[k]=c_piny[j-k-1];
/*
20)
c_piy[j]='
//这部分取得拼音,且补上空格