用VC++6.0編程實(shí)現(xiàn)漢字拼音查找
用VC++6.0編程實(shí)現(xiàn)漢字拼音查找
eDog[原創(chuàng)]
摘要 使用VC++6.0編程查找漢字的拼音
關(guān)鍵字 漢字,拼音,資源
下載:http://www.shnenglu.com/Files/edog/LookPY.rar
一、 引言
在讀書看報(bào)或者瀏覽網(wǎng)上文章時(shí)候,經(jīng)常會(huì)看到一些比較生僻的漢字而不知道其讀音;或者有些漢字知道其寫法,可以使用五筆等筆劃輸入法輸入?yún)s不能使用拼音輸入法輸入。本文將演示怎么使用VC++6.0編寫程序?qū)崿F(xiàn)漢字的拼音的查找,對(duì)于多音字也可以把所有的拼音找出來。在網(wǎng)上看到生僻的漢字時(shí),把漢字粘貼到本程序的輸入框,就可以查找出這些漢字的拼音;或者使用五筆等輸入法把漢字輸入到本程序查找其拼音。可以有助于讀者正確的使用漢語拼音。
二、 基礎(chǔ)知識(shí)
1、本程序?qū)崿F(xiàn)的原理是建立一張對(duì)應(yīng)表,記錄所有漢字和對(duì)應(yīng)的拼音,根據(jù)輸入框中的漢字在此對(duì)應(yīng)表中查找出其拼音,對(duì)于多音字可以查找出多個(gè)拼音,表的結(jié)構(gòu)為拼音在前,用空格或者TAB鍵分隔,具有此讀音的漢字緊跟在后,每個(gè)拼音及其漢字占一行,如下為其中的兩行:
a 啊阿呵吖嗄腌錒錒
ang 昂骯盎仰卬岇昻枊醃醠骯
2、可以把這個(gè)對(duì)應(yīng)表保存在一個(gè)文件中,每次讀取文件進(jìn)行拼音的查找。為了使用上的方便,可以把此文件作為程序資源的一部分,附加在應(yīng)用程序中,以后使用時(shí)只需要一個(gè)應(yīng)用程序就可以正確運(yùn)行了。在程序運(yùn)行時(shí)候根據(jù)資源中的數(shù)據(jù)進(jìn)行查找,而不需要去讀取對(duì)應(yīng)表文件。本例子程序中此對(duì)應(yīng)表的資源類型命名為“PYGBK”,資源的ID為IDR_PYGBK1。操作應(yīng)用程序中的資源需要用到一些Windows API,如下:
HRSRC FindResource(
HMODULE hModule,
LPCTSTR lpName,
LPCTSTR lpType
);
此函數(shù)用于找到程序中的資源,輸入?yún)?shù)分別為程序的實(shí)例句柄、資源名稱和資源類型。返回資源的句柄。
DWORD SizeofResource(
HMODULE hModule,
HRSRC hResInfo
);
此函數(shù)用于得到指定資源的大小,輸入?yún)?shù)分別為程序的實(shí)例句柄和資源的句柄。返回資源大小的字節(jié)數(shù)。
HGLOBAL LoadResource(
HMODULE hModule,
HRSRC hResInfo
);
此函數(shù)用于裝入指定的資源,輸入?yún)?shù)分別為程序的實(shí)例句柄和資源的句柄。返回指向資源數(shù)據(jù)的指針。
以上的Windows API的詳細(xì)使用方法請(qǐng)參考MSDN。
3、在開始查找漢字拼音之前,需要判斷輸入的漢字是否合法。比如用戶輸入了英文字符就會(huì)產(chǎn)生錯(cuò)誤信息。對(duì)于簡體中文漢字來說,每個(gè)漢字由兩個(gè)字節(jié)組成,第一個(gè)字節(jié)的范圍為0xA1~0xFF,第二個(gè)字節(jié)的范圍為0x40~0xFF,根據(jù)此條件就可以判斷輸入的字符是否合法,程序上實(shí)現(xiàn)如下:











其中:buf為輸入的漢字字符串(最多10個(gè)漢字20個(gè)字符),j為位移
((j+2)%2==0)表示ch為漢字的第一個(gè)字節(jié)
((j+2)%2==1)表示ch為漢字的第二個(gè)字節(jié)
有關(guān)漢字編碼和拼音的知識(shí)請(qǐng)參考其他文檔。
一、編程實(shí)現(xiàn)
1、 創(chuàng)建一個(gè)基于對(duì)話框的MFC應(yīng)用程序。
2、 制作界面,如下圖1所示:
3、 把漢字拼音對(duì)應(yīng)表導(dǎo)入為資源,定義資源名字為“PYGBK”,自動(dòng)生成資源ID為IDR_PYGBK1,這里需要注意的是在此資源的屬性框中去掉“External file”的選擇(缺省為選擇),這樣對(duì)應(yīng)表才能真正導(dǎo)入到應(yīng)用程序中,達(dá)到與外部文件的分離。
4、 為輸入框定義一個(gè)CString類型的變量m_Edit1,為列表框定義一個(gè)CListBox類型的變量m_List1。
為查找按鈕添加相應(yīng)的關(guān)聯(lián)函數(shù),并在此函數(shù)中添加查找拼音的代碼。具體算法為查找對(duì)應(yīng)表中的所有漢字,如果找到就再查找其拼音并把與此漢字對(duì)應(yīng)的所有拼音顯示在列表框中。下圖2為查找漢字串“蒹葭蒼蒼白露為霜”的結(jié)果。
5、主要函數(shù)代碼:

2

3



4

5

6

7

8

9

10

11

12



13

14

15

16



17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43



44

45

46

47

48

49


50

51

52

53

54

55

56

57

58



59

60

61

62

63



64

65



66

67

68

69

70

71

72

73

74

75

76



77

78



79

80

81



82

83

84

85

86

87

88

89

90

一、 小結(jié)
本文從原理和編程實(shí)現(xiàn)方面簡單的介紹了漢字拼音查找的方法,并簡單演示了怎么使用應(yīng)用程序的資源。實(shí)現(xiàn)的關(guān)鍵為建立一張漢字和拼音的對(duì)應(yīng)表并導(dǎo)入到應(yīng)用程序中以達(dá)到應(yīng)用程序與外部文件的分離。本程序在Windows98/2000環(huán)境使用VC++6.0編譯通過。
posted on 2005-11-30 00:25 冰凍熱狗 閱讀(8954) 評(píng)論(28) 編輯 收藏 引用 所屬分類: 應(yīng)用程序