最近在做拼音输入法,网上找了很多资料,但是大部分程序都是比较老的,有以下几个问题:
1.很多汉字不支持。
2.都是用在T9键盘上,全键盘输入法还没找到。
3.优化关闭可以使用,优化一旦打开就会出错。
先上图
大致操作流程如下:输入拼音,显示汉字,最右边大于号为翻页,循环查看。
汉字库为GB2312
部分程序如下,具体请看附件:
/*定义首字母索引表*/ struct PY_index *PY_index_headletter[]={PY_index_a, PY_index_b, PY_index_c, PY_index_d, PY_index_e, PY_index_f, PY_index_g, PY_index_h, PY_index_i, PY_index_j, PY_index_k, PY_index_l, PY_index_m, PY_index_n, PY_index_o, PY_index_p, PY_index_q, PY_index_r, PY_index_s, PY_index_t, PY_index_u, PY_index_v, PY_index_w, PY_index_x, PY_index_y, PY_index_z, PY_index_end}; char * py_ime(char *strInput_py_str) { struct PY_index *cpHZ; char i,cInputStrLength; cInputStrLength=strlen(strInput_py_str); /*输入拼音串长度*/ if(*strInput_py_str=='\0') return NULL; /*如果输入空字符返回0*/ for(i=0;i<cInputStrLength;i++) *(strInput_py_str+i)|=0x20; /*将字母串转为小写*/ if(*strInput_py_str=='i') return NULL; /*错误拼音输入*/ if(*strInput_py_str=='u') return NULL; if(*strInput_py_str=='v') return NULL; cpHZ = PY_index_headletter[strInput_py_str[0] - 'a']; /*查首字母索引*/ unsigned char count = index_number[strInput_py_str[0] - 'a']; // cpHZedge = PY_index_headletter[strInput_py_str[0] - 'a' + 1]; /*设置指针界限*/ // printf("%x, %x\n", cpHZ, cpHZedge); strInput_py_str++; /*指向拼音串第二个字母*/ while(count--) /*索引表不超界*/ { for(i=0;i<cInputStrLength;i++) { if(*(strInput_py_str+i)!=*((*cpHZ).PY+i)) break; /*发现字母串不配,退出*/ } if(i==cInputStrLength) /*字母串全配*/ { return (*cpHZ).PY_mb; } cpHZ++; } return NULL; /*无果而终*/ }
其中index_number代替了指针界线的设置,因为在实验中发现,优化后cpHZedge 居然大于cpHZ。
CSDN上一位网友提供的汉字码表。。。http://download.csdn.net/download/_flying_/634159
最新回复 [0]