A. 【急】用c++實現漢字轉拼音程序
輸入法中使用了兩個重要數據結構,分別是PY_NODE和PY_SUBNODE。每個PY_NODE對應一個數字鍵組合,PY_SUBNODE則對應一組拼音組合。由於一個數字組合可對應多個拼音組合(如「226」對應「ban」、「bao」、「can 」、「cao」),因此這兩個結構實現的是一個兩級的對應表。
PY_NODE按樹組織,而PY_SUBNODE按雙向鏈表組織。二者的基本關系如圖1所示。
以下是兩個結構的定義:
typedef struct py_node{
unsigned int son[8]; //對應下次2~9按鍵輸入時應轉到的PY_NODE的ID號
unsigned int father; //父節點ID號
struct py_subnode *ptrpy; //指向下屬第一個PY_SUBNODE的指針
}PY_NODE;
typedef rom struct py_subnode{
unsigned char py[7]; //本節點的拼音字元串
struct py_subnode *prev; //指向前一PY_SUBNODE的指針
struct py_subnode *next; //指向下一PY_SUBNODE的指針
unsigned char *ptrUnicode; //指向本節點對應Unicode碼表的指針
}PY_SUBNODE;
設計中我們所參照的漢語拼音表中共有412種組合,這樣系統中必須有412個PY_SUBNODE與其一一對應;系統中共建立了250個PY_NODE。建立此部分數據的工作比較繁瑣,分以下5個步驟進行:
1、 漢字按拼音進行分組,按常用程度排序,並將漢字轉化為Unicode碼或國標碼,碼型視系統要求而定;
2、 將有效拼音轉換為數字鍵盤值組合,如拼音「cui」轉為數字值「284」,這些值對應了部分PY_NODE;
3、 增加中間PY_NODE,用於表示本身無效但後續輸入有效的拼音,如「b」、「c」、「don」、「a」等節點;
4、 將數字鍵組合相同的PY_SUBNODE編成鏈表,由某一PY_NODE中的ptrpy指針指向表頭;
5、 按數字鍵組合的關系,將PY_NODE組成樹。
圖1中所示組織關系並不復雜,但其工作量不小,一般情況下可編寫轉換程序自動建立。圖2為拼音輸入法數據結構的一個片斷。
在改變當前PY_NODE時,一般應伴有一些顯示操作,因應用不同各有差異,此處不做過多說明。
在當前節點下,可以用某一指定控制鍵(如「#」鍵)來選擇此PY_NODE下屬的PY_SUBNODE以縮小漢字的選取范圍。
例子在下面