![基于GTK的拼音輸入法_第1頁(yè)](http://file4.renrendoc.com/view/55d6df289b189325fd916aa0f626e675/55d6df289b189325fd916aa0f626e6751.gif)
![基于GTK的拼音輸入法_第2頁(yè)](http://file4.renrendoc.com/view/55d6df289b189325fd916aa0f626e675/55d6df289b189325fd916aa0f626e6752.gif)
![基于GTK的拼音輸入法_第3頁(yè)](http://file4.renrendoc.com/view/55d6df289b189325fd916aa0f626e675/55d6df289b189325fd916aa0f626e6753.gif)
![基于GTK的拼音輸入法_第4頁(yè)](http://file4.renrendoc.com/view/55d6df289b189325fd916aa0f626e675/55d6df289b189325fd916aa0f626e6754.gif)
![基于GTK的拼音輸入法_第5頁(yè)](http://file4.renrendoc.com/view/55d6df289b189325fd916aa0f626e675/55d6df289b189325fd916aa0f626e6755.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于GTK的拼音輸入法/i_love_lei_lei/blog/category/%C7%B6%C8%EB%CA%BD基于GTK的拼音輸入法(1)2009-11-1710:03#include<gtk/gtk.h>
#include<stdio.h>
#include<string.h>#include<ctype.h>
#include<stdlib.h>charT[]={"abcdefghijklmnopqrstuvwxyz"};
charTT[]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};charpin_y[20];
charpy_store[10];
char*CH_CON[10][9];
charOPERATE;
//操作標(biāo)志位;
intSYMBOL=0;
//測(cè)試字?jǐn)?shù)組的標(biāo)志位,用來(lái)判斷循環(huán)的
intROW,COLUMN,ROW_MAX,COLUMN_MIN;
//抽出字的數(shù)組的行列值
charci_buffer[20];
//預(yù)選存放字詞的~
charci_py_buffer[20];
//存放詞的拼音;charhanzi[60];
//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];
//存放的一個(gè)字
intFrequency;
//使用的頻度
structChinese_data*next;
//指向下一個(gè)字
//structChinese_data*pre;//指向前一個(gè)字
};structword
{
chardata[20];
intFrequency;
structword*next;
};structElement
{charElementType;//元素的類(lèi)型
structChinese_data*ch;//存放數(shù)據(jù)(漢子)
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;/*******************************************************************
函數(shù)名:creat_node_data;
輸入?yún)?shù):void;
輸出:void;
功能:開(kāi)辟漢字的存儲(chǔ)空間;
********************************************************************/
structChinese_data*creat_node_data(void)
{
structChinese_data*c;
c=(structChinese_data*)malloc(sizeof(structChinese_data));
returnc;
}/*******************************************************************
函數(shù)名:creat_node_word;
輸入?yún)?shù):void;
輸出:void;
功能:開(kāi)辟詞的存儲(chǔ)空間,
********************************************************************/
structword*creat_node_word(void)
{
structword*c;
c=(structword*)malloc(sizeof(structword));
returnc;
}/*******************************************************************
函數(shù)名:creat_node;
輸入?yún)?shù):void;
輸出:void;
功能:開(kāi)辟鏈表的存儲(chǔ)空間,
********************************************************************/
structElement*creat_node(void)
{
structElement*b;
b=(structElement*)malloc(sizeof(structElement));
returnb;
}/*******************************************************************
函數(shù)名:bl;
輸入?yún)?shù):structElement*head;
輸出:void;
功能:對(duì)輸入的鏈表進(jìn)行遍歷輸出,按照漢子表的形式輸出,
********************************************************************/
voidbl(structElement*head)
//等深度遍歷函數(shù)
{
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]='\0';
for(i=0;i<26;i++)
{
if(head->letter[i])
{
head=head->letter[i];
if(head->ch!=NULL)
//可以在底下一級(jí)插入排序函數(shù)即為遍歷排序或者插入釋放類(lèi)存的語(yǔ)句!
{
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';
//這部分取得拼音,且補(bǔ)上空格!
j++;
//
}
//
piy[j]='\0';
//
for(k=0;k<26;k++)
{
if(piy[0]==T[k])
{
printf("%c",TT[k]);//打印出大寫(xiě)字母標(biāo)志
}
}
printf("%s",piy);
//打印出拼音
pe=NULL;
ph=head->ch;
while(ph!=NULL)
{
printf("%s",ph->data);
//打印拼音之后的字
ph=ph->next;
}
printf("\n");
//打印換行符號(hào),即拼音后面的漢子結(jié)束了。
ph=NULL;
//清空指針
}
if(head->ci!=NULL)
{
pe=head;
j=0;
while(pe->ElementType)
//得到的倒序拼音
{
sprintf(&ci_piny[j],"%c",pe->ElementType);
pe=pe->Father;
j++;
}
for(k=0;k<j;k++)
//再倒序排列
{
ci_piy[k]=ci_piny[j-k-1];
}
ci_piy[j]='\0';
//printf("%s\n",ci_piy);
for(k=0;k<26;k++)
{
if(ci_piy[0]==T[k])
{
printf("%c",TT[k]);//打印出大寫(xiě)字母標(biāo)志
printf("%c",T[2]);
}
}
printf("%s",ci_piy);
pe=NULL;
pi=head->ci;
while(pi!=NULL)
{
printf("%s",pi->data);
pi=pi->next;
}
printf("\n");
pi=NULL;
}
bl(head);
head=head->Father;
}
}
}/*******************************************************************
函數(shù)名:order;
輸入?yún)?shù):structElement*Head;
輸出:void;
功能:對(duì)輸入的鏈表結(jié)構(gòu)里面有詞的節(jié)點(diǎn)按照使用頻度值進(jìn)行排序,排序完畢后,將排序完的
表頭賦值給輸入的指針;
********************************************************************/
voidorder(structElement*Head)/*排序函數(shù)*/
{
structwordsh;
structword*head;
sh.next=Head->ci;
head=&sh;
structword*temp=NULL;//默認(rèn)為NULL,也就是鏈表的結(jié)尾
structword*ptr1=head;
structword*ptr2=head->next;while(ptr1->next!=temp)//(ptr1!=NULL)
{
while(ptr2->next!=temp)//(ptr2!=NULL)
{
if(ptr1->next->Frequency<ptr2->next->Frequency)//(ptr1->score>ptr2->score)
{//交換ptr1->link和ptr2->link
ptr1->next=ptr2->next;
ptr2->next=ptr2->next->next;//temp->link=ptr2;
ptr1->next->next=ptr2;//ptr2->link=ptr1;
}
ptr1=ptr1->next;//ptr2=ptr2->link;
ptr2=ptr1->next;//從上面移動(dòng)下來(lái)的
}
temp=ptr2;//新加的
ptr1=head;//ptr1=ptr1->link;
ptr2=ptr1->next;//從上面移動(dòng)下來(lái)的
}
head=head->next;
Head->ci=head;
}/*******************************************************************
函數(shù)名:sort;
輸入?yún)?shù):structElement*Head;
輸出:void;
功能:對(duì)輸入的鏈表結(jié)構(gòu)里面有字的節(jié)點(diǎn)按照使用頻度值進(jìn)行排序,排序完畢后,將排序完的
表頭賦值給輸入的指針;
********************************************************************/
voidsort(structElement*Head)/*排序函數(shù)*/
{structChinese_datash;
structChinese_data*head;
sh.next=Head->ch;
head=&sh;
structChinese_data*temp=NULL;//默認(rèn)為NULL,也就是鏈表的結(jié)尾
structChinese_data*ptr1=head;
structChinese_data*ptr2=head->next;while(ptr1->next!=temp)//(ptr1!=NULL)
{
while(ptr2->next!=temp)//(ptr2!=NULL)
{
if(ptr1->next->Frequency<ptr2->next->Frequency)//(ptr1->score>ptr2->score)
{//交換ptr1->link和ptr2->link
ptr1->next=ptr2->next;
ptr2->next=ptr2->next->next;//temp->link=ptr2;
ptr1->next->next=ptr2;//ptr2->link=ptr1;
}
ptr1=ptr1->next;//ptr2=ptr2->link;
ptr2=ptr1->next;//從上面移動(dòng)下來(lái)的
}
temp=ptr2;//新加的
ptr1=head;//ptr1=ptr1->link;
ptr2=ptr1->next;//從上面移動(dòng)下來(lái)的
}
head=head->next;
Head->ch=head;
}/*******************************************************************
函數(shù)名:blpx;
輸入?yún)?shù):structElement*Head;
輸出:void;
功能:用字,詞的排序函數(shù)來(lái)實(shí)現(xiàn)整個(gè)鏈表的頻度排序;
********************************************************************/
voidblpx(structElement*head)
//遍歷排序總體的
{
inti,j,k;
structChinese_data*p_ch;
//structElement*pe;
for(i=0;i<26;i++)
{
if(head->letter[i])
{
head=head->letter[i];
//blpx(head);
if(head->ch!=NULL)
{
sort(head);
//對(duì)這一級(jí)的漢子排序
}
if(head->Isword)
{
order(head);
}
blpx(head);
head=head->Father;
}
}
}/*******************************************************************
函數(shù)名:blw;
輸入?yún)?shù):structElement*Head;
輸出:void;
功能:對(duì)輸入的鏈表進(jìn)行回寫(xiě),將鏈表節(jié)點(diǎn)的字,詞寫(xiě)入文件中;
********************************************************************/
voidblw(structElement*head)
//等深度遍歷函數(shù)
{
FILE*w_file;
inti,j,k;
structChinese_data*ph;
structword*pi;
structElement*pe;
charpiny[8],piy[8];
charc_piny[20],c_piy[20];
char*space="";
char*enter="\n";
piny[0]='\0';
piy[0]='\0';
for(i=0;i<26;i++)
{
if(head->letter[i])
{
head=head->letter[i];
//blw(head);
if(head->ch!=NULL)
//可以在底下一級(jí)插入排序函數(shù)即為遍歷排序或者插入釋放類(lèi)存的語(yǔ)句!
{
ph=head->ch;
pe=head;
j=0;
while(pe->ElementType)
//得到的倒序拼音
{
//strncpy(&piny[j],&(pe->ElementType),1);
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';
//這部分取得拼音,且補(bǔ)上空格!
j++;
//
}
//
piy[j]='\0';
//
for(k=0;k<26;k++)
{
if(piy[0]==T[k])
{
//printf("%c",TT[k]);
//大寫(xiě)字母
w_file=fopen("dx","a+b");
fwrite(&TT[k],sizeof(char),1,w_file);
//寫(xiě)大寫(xiě)字母標(biāo)記位置!
fwrite(space,sizeof(char),1,w_file);
//大寫(xiě)字母+空格
fclose(w_file);
}
}
//printf("%s",piy);
//打印出拼音
pe=NULL;
ph=head->ch;
w_file=fopen("dx","a+b");
//
fwrite(piy,sizeof(char),8,w_file);
//寫(xiě)入拼音
fclose(w_file);
//
while(ph)
{
//printf("%s",ph->data);
//拼音之后的字
w_file=fopen("dx","a+b");
fwrite(ph->data,sizeof(char),3,w_file);
fclose(w_file);
ph=ph->next;
}
//printf("\n");
ph=NULL;
w_file=fopen("dx","a+b");
fwrite(enter,sizeof(char),strlen(enter),w_file);
//寫(xiě)換行
fclose(w_file);
}
if(head->ci!=NULL)
{
pi=head->ci;
pe=head;
j=0;
while(pe->ElementType)
//得到的倒序拼音
{
//strncpy(&piny[j],&(pe->ElementType),1);
sprintf(&c_piny[j],"%c",pe->ElementType);
pe=pe->Father;
j++;
}
for(k=0;k<j;k++)
//再倒序排列
{
//
c_piy[k]=c_piny[j-k-1];
//
}
/*
//
while(j<20)
//
{
//
c_piy[j]='\40';
//這部分取得拼音,且補(bǔ)上空格!
j++;
//
}*/
//
c_piy[j]='\0';
//
for(k=0;k<26;k++)
{
if(c_piy[0]==T[k])
{
//printf("%c",TT[k]);
//大寫(xiě)字母
w_file=fopen("dx","a+b");
fwrite(&TT[k],sizeof(char),1,w_file);
//寫(xiě)大寫(xiě)字母標(biāo)記位置!
fwrite(&T[2],sizeof(char),1,w_file);
//寫(xiě)詞標(biāo)記位"c"
fclose(w_file);
}
}
//printf("%s",piy);
//打印出拼音
pe=NULL;
pi=head->ci;
w_file=fopen("dx","a+b");
//
fwrite(c_piy,sizeof(char),j,w_file);
//寫(xiě)入詞的拼音
fclose(w_file);
//
while(pi)
{
//printf("%s",ph->data);
//拼音之后的字
w_file=fopen("dx","a+b");
fwrite(pi->data,sizeof(char),strlen(pi->data),w_file);
//詞的長(zhǎng)度不定~
fwrite(&T[2],sizeof(char),1,w_file);
fclose(w_file);
pi=pi->next;
}
//printf("\n");
pi=NULL;
w_file=fopen("dx","a+b");
fwrite(enter,sizeof(char),strlen(enter),w_file);
//寫(xiě)換行
fclose(w_file);
}
blw(head);
head=head->Father;
}
}
}/*******************************************************************
函數(shù)名:read_file;
輸入?yún)?shù):void;
輸出:void;
功能:讀取漢子碼表的漢子,生成檢索用的鏈表;
********************************************************************/
voidread_file(void)
{
FILE*p;
charpos;
charci_pos;
charpp[20];
inti,j,k,x;
p=fopen("dx","r");
father=(structElement*)malloc(sizeof(structElement));
//開(kāi)辟結(jié)構(gòu)體空間
pointer=father;
while(!feof(p))
{
fread(&pos,1,1,p);
//讀取一行的首字母標(biāo)號(hào)(大寫(xiě)的)
if(isupper(pos))
//判斷是否是大寫(xiě)字母
{
fread(&ci_pos,1,1,p);
//printf("%c\n",ci_pos);
if(ci_pos=='c')
{
fread(&ci_pos,1,1,p);
i=1;
while(islower(ci_pos))
{
fread(&ci_pos,1,1,p);
i++;
}
//printf("詞拼音長(zhǎng)度為:%d\n",i-1);
fseek(p,-i,SEEK_CUR);
memset(pp,0,20);
fread(pp,i-1,1,p);
//printf("詞的拼音為:%s\n",pp);
j=0;
for(i=0;i<20;i++)
{
if(islower(pp[i]))j++;
//判斷詞拼音字長(zhǎng)(位數(shù))
}
//printf("測(cè)試得到的詞長(zhǎng):%d\n",j);
for(x=0;x<=j;x++)
//固定指針的位置:
{
p_element=pointer;
for(k=0;k<26;k++)
//即根據(jù)拼音的長(zhǎng)度把指針指向?qū)?yīng)的節(jié)點(diǎn)
{
if(pp[x]==T[k])
//判斷是那一個(gè)字母的指針
{
if(pointer->letter[k]==NULL)
{
//printf("%d\n",k);
pointer->letter[k]=creat_node();
pointer=pointer->letter[k];
pointer->ElementType=pp[x];
pointer->ch=NULL;
pointer->ci=NULL;
for(i=0;i<26;i++)
{
pointer->letter[i]=NULL;
}
pointer->Father=p_element;
}
else
{
pointer=pointer->letter[k];
}
}
}
}
memset(pp,0,20);
pointer->Isword=1;
pointer->ci=creat_node_word();
//開(kāi)辟詞存儲(chǔ)空間
pointer_ci=pointer->ci;
while(fread(&ci_pos,1,1,p)&&(ci_pos!='\n'))//行讀取的判斷
{
i=0;
while(ci_pos!='c')
{
fread(&ci_pos,1,1,p);
i++;
}
fseek(p,-1,SEEK_CUR);
fseek(p,-i,SEEK_CUR);
fread(pp,i,1,p);
pp[i]='\0';
sprintf(pointer_ci->data,"%s",pp);
//填充對(duì)應(yīng)表頭的漢字存儲(chǔ)空間
//
printf("詞:%s\n",pointer_ci->data);
pi=pointer_ci;
pointer_ci->next=creat_node_word();
//指向下一個(gè)
pointer_ci=pointer_ci->next;
memset(pp,0,20);
fseek(p,1,SEEK_CUR);
}
free(pi->next);
//是否釋放了內(nèi)存空間????
pi->next=NULL;//收尾
pointer=father;
}
elseif(ci_pos=='')
{
//fseek(p,-2,SEEK_CUR);
//fread(s.label,1,2,p);
fread(s.py,1,8,p);
//讀取標(biāo)號(hào),即拼音“a“
j=0;
for(i=0;i<8;i++)
{
if(islower(s.py[i]))j++;
//判斷拼音字長(zhǎng)(位數(shù))
}
for(x=0;x<j;x++)
//固定指針的位置:
{
p_element=pointer;
for(k=0;k<26;k++)
//即根據(jù)拼音的長(zhǎng)度把指針指向?qū)?yīng)的節(jié)點(diǎn)
{
if(s.py[x]==T[k])
//判斷是那一個(gè)字母的指針
{
if(pointer->letter[k]==NULL)
{
//printf("%d\n",k);
pointer->letter[k]=creat_node();
pointer=pointer->letter[k];
pointer->ElementType=s.py[x];
pointer->Father=p_element;
}
else
{
pointer=pointer->letter[k];
}
}
}
}
pointer->ch=creat_node_data();
//開(kāi)辟漢子存儲(chǔ)空間
pointer_ch=pointer->ch;
while(fread(&pos,1,1,p)&&(pos!='\n'))//行讀取的判斷
{
fseek(p,-1,SEEK_CUR);
fread(s.ch,1,3,p);
//printf("%s",s.ch);
sprintf(pointer_ch->data,"%s",s.ch);
//填充對(duì)應(yīng)表頭的漢字存儲(chǔ)空間
pu=pointer_ch;
pointer_ch->next=creat_node_data();
//指向下一個(gè)
pointer_ch=pointer_ch->next;
s.ch[0]='\0';
}
free(pu->next);
//是否釋放了內(nèi)存空間????
pu->next=NULL;//收尾
//printf("%s","yihangjiesu");
pointer=father;
}
}
}
fclose(p);
}/*******************************************************************
函數(shù)名:write_file;
輸入?yún)?shù):structElement*Head;
輸出:void;
功能:將原始的文件清空,寫(xiě)入新的鏈表節(jié)點(diǎn)的字詞;
********************************************************************/
voidwrite_file(structElement*head)
{
FILE*p;
p=fopen("dx","w");
fclose(p);
blw(head);
}/*******************************************************************
函數(shù)名:s_free;
輸入?yún)?shù):structElement*Head;
輸出:void;
功能:釋放鏈表的內(nèi)存空間;
********************************************************************/
voids_free(structElement*head)
//釋放內(nèi)存~
{
inti,j,k;
structChinese_data*p_ch,*p_ch_free;
structElement*p_element_free;
charpiny[10],piy[10];
for(i=0;i<26;i++)
{
if(head->letter[i])
{
head=head->letter[i];
s_free(head);
if(head->ch!=NULL)
//可以在底下一級(jí)插入排序函數(shù)即為遍歷排序或者插入釋放類(lèi)存的語(yǔ)句!
{
p_ch=head->ch;
head->ch=NULL;
while(p_ch!=NULL)
{
p_ch_free=p_ch;
p_ch=p_ch->next;
free(p_ch_free);
}
p_ch=NULL;
}
p_element_free=head;
head=head->Father;
free(p_element_free);
p_element_free=NULL;
}
}
}/*******************************************************************
函數(shù)名:chose;
輸入?yún)?shù):char*p1,char*p2;
輸出:void;
功能:輸入操作,選擇選中的詞;
********************************************************************/
voidchose(char*p1,char*p2)
//選擇后對(duì)應(yīng)的操作
{
//printf("開(kāi)始調(diào)用CHOSE函數(shù)!\n");
structElement*p_e;
structChinese_data*p_ch;
structword*p_ci;
intfind_flag;
inti,j,k;
p_e=father;
find_flag=0;
i=0;
while(p1[i])
//查找到字的存儲(chǔ)區(qū)域
{
for(j=0;j<26;j++)
{
if(p1[i]==T[j])
{
p_e=p_e->letter[j];
}
}
i++;
}
if(p_e->Isword)
{
p_ci=p_e->ci;
while(p_ci)
{
if(!strcmp(p_ci->data,p2))//查早到對(duì)應(yīng)的字
{
p_ci->Frequency++;
find_flag=1;
break;
}
if(p_ci->next!=NULL)
{
p_ci=p_ci->next;
}
else
{
break;
}
}
}
if(p_e->ch!=NULL)
{
p_ch=p_e->ch;
}
//-----------------------------------------------------------------//
elseif(p_e->ch==NULL)
{
//printf("%s\n",p_e->ch->data);
k=0;
while(k<26)
{
if((p_e->letter[k]!=NULL)&&(p_e->letter[k]->ch!=NULL))
{
p_ch=p_e->letter[k]->ch;
//printf("%s\n",p_ch->data);打印處于選擇的字;
break;
}
k++;
}
}
//--------------------------------------------------------------------------//
//k=strlen(p2);
//調(diào)試用
//printf("%s\n",p2);
//printf("%d\n",k);
if(!find_flag)
{
while(p_ch)
{
if(!strncmp(p_ch->data,p2,3))//查早到對(duì)應(yīng)的字
{
p_ch->Frequency++;
break;
}
p_ch=p_ch->next;
}
find_flag=0;
strcat(ci_buffer,p_ch->data);
//預(yù)選字詞;
ci_buffer[strlen(ci_buffer)]='\0';
strcat(ci_py_buffer,p1);
ci_py_buffer[strlen(ci_py_buffer)]='\0';
}
else
{
strcat(ci_buffer,p_ci->data);
ci_buffer[strlen(ci_buffer)]='\0';
strcat(ci_py_buffer,p1);
ci_py_buffer[strlen(ci_py_buffer)]='\0';
find_flag=0;
}
}
查看文章
基于GTK的拼音輸入法(2)2009-11-1710:03/*******************************************************************
函數(shù)名:creat_word;
輸入?yún)?shù):structElement*head,char*ci_buffer,char*ci_py_buffer;
輸出:structElement*p;
功能:造詞;
********************************************************************/
structElement*creat_word(structElement*head,char*ci_buffer,char*ci_py_buffer)
//參數(shù)為:1字詞拼音,2字詞;
{
inti,j,k,n,x;
intbz;
intci_cmp_flag;
structword*p_ci;
structElement*pointer,*p_element;
chartest[20];
ci_cmp_flag=1;
pointer=head;
//引用的全局變量
i=strlen(ci_py_buffer);
j=strlen(ci_buffer);
if(j>3)
{
for(x=0;x<i;x++)
//固定指針的位置:
{
p_element=pointer;
for(k=0;k<26;k++)
//即根據(jù)拼音的長(zhǎng)度把指針指向?qū)?yīng)的節(jié)點(diǎn)
{
if(ci_py_buffer[x]==T[k])
//判斷是那一個(gè)字母的指針
{
if(pointer->letter[k]==NULL)
{
pointer->letter[k]=creat_node();
pointer=pointer->letter[k];
pointer->ElementType=T[k];
pointer->ch=NULL;
pointer->ci=NULL;
for(bz=0;bz<26;bz++)
{
pointer->letter[bz]=NULL;
}
pointer->Father=p_element;
}
elseif(pointer->letter[k]!=NULL)
{
pointer=pointer->letter[k];
}
}
}
}
if(pointer->ci!=NULL)
//缺少比較是否相同的詞語(yǔ)!
{
p_ci=pointer->ci;
ci_cmp_flag=strcmp(p_ci->data,ci_buffer);
while((p_ci->next!=NULL)&&ci_cmp_flag)
{
p_ci=p_ci->next;
ci_cmp_flag=strcmp(p_ci->data,ci_buffer);
if(!ci_cmp_flag)break;
}
if(ci_cmp_flag)
{
p_ci->next=creat_node_word();
p_ci->next->next=NULL;
sprintf(p_ci->next->data,"%s",ci_buffer);
}
}
else
{
pointer->Isword=1;
pointer->ci=creat_node_word();
p_ci=pointer->ci;
p_ci->next=NULL;
sprintf(p_ci->data,"%s",ci_buffer);
}
}
pointer=father;
//printf("%s\n",ci_buffer);
//printf("%s\n",ci_py_buffer);
memset(ci_buffer,0,20);
memset(ci_py_buffer,0,20);
returnpointer;
}/*******************************************************************
函數(shù)名:test_py;
輸入?yún)?shù):char*p;
輸出:void;
功能:檢測(cè)輸入的拼音,并抽出對(duì)應(yīng)拼音的漢子,以便選擇操作;
********************************************************************/
voidtest_py(char*p)
{
structElement*p_e;
structChinese_data*p_ch;
structword*p_ci;
inti,j,k,BZW;
intpy_longth;
charbuffer[20];
//存放沒(méi)有字節(jié)點(diǎn)的拼音;
p_e=father;
i=0;
BZW=0;
//printf("檢測(cè)的拼音為:%s\n",p);
while(p[i])
{
//printf("%c",p[i]);
i++;
}
i=0;
while(p[i])
//BZw用來(lái)控制跳出循環(huán)
{
//查找到實(shí)際有效的拼音長(zhǎng)度
for(j=0;j<26;j++)
{
if(p[i]==T[j])
{
if(p_e->letter[j]!=NULL)
{
p_e=p_e->letter[j];
//printf("找到對(duì)應(yīng)的節(jié)點(diǎn)%c\n",p_e->ElementType);
i++;
break;
}
}
}
}
/*
printf("pointer當(dāng)前節(jié)點(diǎn)的字母為:%c",p_e->ElementType);
printf("找到實(shí)際位置:%c\n",p_e->ElementType);//測(cè)試用
printf("pointer的詞標(biāo)志位值為:%d\n",p_e->Isword);
*/
py_longth=i;
if(py_longth!=0)
{
BZW=0;
//保留使用,不用可以注銷(xiāo)
i=0;j=0;k=0;
if(p_e->Isword==1)
{
p_ci=p_e->ci;
while(p_ci!=NULL)
//取詞
{
CH_CON[j][i]=p_ci->data;
i++;
if(i==9)
{
i=0;//列
j=j+1;//行
}
if(p_ci->next==NULL)
{
break;
}
else
{
p_ci=p_ci->next;
}
}
if(p_e->ch!=NULL)
{
p_ch=p_e->ch;
while(p_ch!=NULL)//取字,便于顯示;
{
CH_CON[j][i]=p_ch->data;
p_ch=p_ch->next;
i++;
if(i==9&&(p_ch->data!=NULL))
{
i=0;//列
j=j+1;//行
}
}
}
ROW_MAX=j;
//printf("字詞行數(shù)為:%d\n",ROW_MAX);
COLUMN_MIN=i;
//printf("最小列值為:%d\n",COLUMN_MIN);
}
else
{
if(p_e->ch!=NULL)
{
p_ch=p_e->ch;
while(p_ch!=NULL)//取字,便于顯示;
{
CH_CON[j][i]=p_ch->data;
p_ch=p_ch->next;
i++;
if(i==9&&(p_ch->data!=NULL))
{
i=0;//列
j=j+1;//行
}
}
ROW_MAX=j;
printf("字詞行數(shù)為:%d\n",ROW_MAX);
COLUMN_MIN=i;
printf("最小列值為:%d\n",COLUMN_MIN);
}
elseif(p_e->ch==NULL)
{
while(k<26)
{
if((p_e->letter[k]!=NULL)&&(p_e->letter[k]->ch!=NULL))
{
/*
memset(buffer,0,20);
strncpy(buffer,p,py_longth)
strcat(buffer,&T[k]);
*/
p_ch=p_e->letter[k]->ch;
while(p_ch!=NULL)//取字,便于顯示;
{
CH_CON[j][i]=p_ch->data;
p_ch=p_ch->next;
i++;
if(i==9)
{
i=0;//列
j=j+1;//行
}
}
ROW_MAX=j;
//printf("字詞行數(shù)為:%d\n",ROW_MAX);
COLUMN_MIN=i;
//printf("最小列值為:%d\n",COLUMN_MIN);
break;
}
k++;
}
}
}
if(ROW_MAX==0)//顯示變量的控制
{
k=COLUMN_MIN;
}
else
{
k=9;
}
memset(hanzi,0,60);
for(i=0;i<k;i++)
{
//printf("%d%s",(i+1),CH_CON[0][i]);
memset(label_swap,0,30);
sprintf(label_swap,"%d",(i+1));
strcat(label_swap,CH_CON[0][i]);
strcat(hanzi,label_swap);
}
gtk_label_set_label(GTK_LABEL(label_cn),hanzi);
}
else
gtk_label_set_label(GTK_LABEL(label_cn),"
");
}/*******************************************************************
函數(shù)名:button_click;
輸入?yún)?shù):GtkWidget*widget,gpointerdata;
輸出:void;
功能:按鍵的回掉函數(shù),實(shí)現(xiàn)對(duì)應(yīng)按鍵的功能;
********************************************************************/
voidbutton_click(GtkWidget*widget,gpointerdata)
{
charbuffer[30];//存放拼音的有效字母;
charzimu;
inti,j,n;
structElement*p_e;
p_e=father;
sprintf(&zimu,"%s",data);
//printf("輸入的字符為:%c\n",zimu);
if(islower(zimu))
{
//memset(buffer,0,30);
strcat(pin_y,&zimu);
//sprintf(buffer,pin_y);
i=0;n=0;
while(i<strlen(pin_y))
{
for(j=0;j<26;j++)
{
if(pin_y[i]==T[j])
{
if(p_e->letter[j]!=NULL)
{
p_e=p_e->letter[j];
n++;
}
}
}
i++;
}
if(i!=n)
{
memset(buffer,0,30);
strncpy(buffer,pin_y,n);
memset(pin_y,0,20);
sprintf(pin_y,buffer);
//printf("有效的拼音字母為:%s\n",buffer);
test_py(pin_y);
gtk_label_set_label(GTK_LABEL(label_py),pin_y);
}
else
{
test_py(pin_y);
gtk_label_set_label(GTK_LABEL(label_py),pin_y);
}
}
elseif(isdigit(zimu))
{
//printf("pin_y[0]的字母為:%c\n",pin_y[0]);
if(pin_y[0]!='\0')
{
//printf("通過(guò)首字母的比較判斷!\n");
if(SYMBOL==ROW_MAX)
{
//printf("通過(guò)行列值大小的比較判斷!\n");
//printf("%d\n",zimu);
i=(int)zimu-48;
if(i<=COLUMN_MIN)
{
//printf("輸入的數(shù)字%d通過(guò)最小行列值的比較!\n",zimu);
switch(zimu)
{
case'1':chose(pin_y,CH_CON[SYMBOL][0]);break;
//選擇
case'2':chose(pin_y,CH_CON[SYMBOL][1]);break;
case'3':chose(pin_y,CH_CON[SYMBOL][2]);break;
case'4':chose(pin_y,CH_CON[SYMBOL][3]);break;
case'5':chose(pin_y,CH_CON[SYMBOL][4]);break;
case'6':chose(pin_y,CH_CON[SYMBOL][5]);break;
case'7':chose(pin_y,CH_CON[SYMBOL][6]);break;
case'8':chose(pin_y,CH_CON[SYMBOL][7]);break;
case'9':chose(pin_y,CH_CON[SYMBOL][8]);break;
}
SYMBOL=0;
gtk_label_set_label(GTK_LABEL(label_yx),ci_buffer);
gtk_label_set_label(GTK_LABEL(label_py),"
");
memset(pin_y,0,20);
gtk_label_set_label(GTK_LABEL(label_cn),"
");
memset(hanzi,0,60);
}
}
else
{
switch(zimu)
{
case'1':printf("進(jìn)入選擇\n");chose(pin_y,CH_CON[SYMBOL][0]);printf("完成選擇\n");break;
//選擇
case'2':chose(pin_y,CH_CON[SYMBOL][1]);break;
case'3':chose(pin_y,CH_CON[SYMBOL][2]);break;
case'4':chose(pin_y,CH_CON[SYMBOL][3]);break;
case'5':chose(pin_y,CH_CON[SYMBOL][4]);break;
case'6':chose(pin_y,CH_CON[SYMBOL][5]);break;
case'7':chose(pin_y,CH_CON[SYMBOL][6]);break;
case'8':chose(pin_y,CH_CON[SYMBOL][7]);break;
case'9':chose(pin_y,CH_CON[SYMBOL][8]);break;
}
SYMBOL=0;
gtk_label_set_label(GTK_LABEL(label_yx),ci_buffer);
gtk_label_set_label(GTK_LABEL(label_py),"
");
memset(pin_y,0,20);
gtk_label_set_label(GTK_LABEL(label_cn),"
");
memset(hanzi,0,60);
}
bl(father);
}
else
{
strcat(entry_buffer,&zimu);
gtk_entry_set_text(GTK_ENTRY(entry_all),entry_buffer);
}
}
}/*******************************************************************
函數(shù)名:button_left_click;
輸入?yún)?shù):GtkWidget*widget,gpointerdata;
輸出:void;
功能:按鍵的回掉函數(shù),左選功能;
********************************************************************/
voidbutton_left_click(GtkWidget*widget,gpointerdata)
//前翻頁(yè)
{
inti;
if(SYMBOL>=1)
{
SYMBOL=SYMBOL-1;
memset(hanzi,0,60);
for(i=0;i<9;i++)
{
//printf("%d%s",(i+1),CH_CON[SYMBOL][i]);
memset(label_swap,0,30);
sprintf(label_swap,"%d",(i+1));
strcat(label_swap,CH_CON[SYMBOL][i]);
strcat(hanzi,label_swap);
}
}
gtk_label_set_label(GTK_LABEL(label_cn),hanzi);
}/*******************************************************************
函數(shù)名:button_right_click;
輸入?yún)?shù):GtkWidget*widget,gpointerdata;
輸出:void;
功能:按鍵的回掉函數(shù),右選功能;
********************************************************************/
voidbutton_right_click(GtkWidget*widget,gpointerdata)
{
inti,k;
if(SYMBOL<ROW_MAX)
{
SYMBOL=SYMBOL+1;
if(SYMBOL==ROW_MAX)
{
k=COLUMN_MIN;
}
else
{
k=9;
}
memset(hanzi,0,60);
for(i=0;i<k;i++)
{
//printf("%d%s",(i+1),CH_CON[SYMBOL][i]);
memset(label_swap,0,30);
sprintf(label_swap,"%d",(i+1));
strcat(label_s
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 2005-2024國(guó)家級(jí)森林公園總體規(guī)劃規(guī)范
- 蘇人版道德與法治九年級(jí)上冊(cè)7.1《一般違法與犯罪》聽(tīng)課評(píng)課記錄
- 浙教版數(shù)學(xué)七年級(jí)上冊(cè)《6.3 線(xiàn)段的大小比較》聽(tīng)評(píng)課記錄1
- 瑜伽健康活動(dòng)贊助合同(2篇)
- 生態(tài)修復(fù)工程招標(biāo)合同(2篇)
- 甲方因乙方責(zé)任解除合同范本(2篇)
- 2022年新課標(biāo)八年級(jí)上冊(cè)歷史第19課七七事變與全民族抗戰(zhàn)聽(tīng)課評(píng)課記錄
- 人教版地理七年級(jí)下冊(cè)《8.4澳大利亞》聽(tīng)課評(píng)課記錄
- 浙教版數(shù)學(xué)七年級(jí)下冊(cè)《2.4 二元一次方程組的簡(jiǎn)單應(yīng)用》聽(tīng)評(píng)課記錄2
- 人教版數(shù)學(xué)八年級(jí)下冊(cè)《19.3 課題學(xué)習(xí)-選擇方案》聽(tīng)評(píng)課記錄
- 七上 U2 過(guò)關(guān)單 (答案版)
- 五年級(jí)上冊(cè)小數(shù)遞等式計(jì)算200道及答案
- 超高大截面框架柱成型質(zhì)量控制
- GB 9706.1-2020醫(yī)用電氣設(shè)備第1部分:基本安全和基本性能的通用要求
- 森林法講解課件
- 口腔頜面外科:第十六章-功能性外科與計(jì)算機(jī)輔助外科課件
- 信用證審核課件
- 植物工廠,設(shè)計(jì)方案(精華)
- 原發(fā)性膽汁性肝硬化(PBC)課件
- 貸款新人電銷(xiāo)話(huà)術(shù)表
- 音箱可靠性測(cè)試規(guī)范
評(píng)論
0/150
提交評(píng)論