青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

edog

冰凍熱狗
數據加載中……

用VC++6.0編程實現漢字拼音查找

VC++6.0編程實現漢字拼音查找

eDog[原創(chuàng)]

摘要   使用VC++6.0編程查找漢字的拼音

關鍵字   漢字,拼音,資源

http://m.shnenglu.com/Files/edog/LookPY.rar

一、             引言

在讀書看報或者瀏覽網上文章時候,經常會看到一些比較生僻的漢字而不知道其讀音;或者有些漢字知道其寫法,可以使用五筆等筆劃輸入法輸入卻不能使用拼音輸入法輸入。本文將演示怎么使用VC++6.0編寫程序實現漢字的拼音的查找,對于多音字也可以把所有的拼音找出來。在網上看到生僻的漢字時,把漢字粘貼到本程序的輸入框,就可以查找出這些漢字的拼音;或者使用五筆等輸入法把漢字輸入到本程序查找其拼音。可以有助于讀者正確的使用漢語拼音。

 

二、             基礎知識

1、本程序實現的原理是建立一張對應表,記錄所有漢字和對應的拼音,根據輸入框中的漢字在此對應表中查找出其拼音,對于多音字可以查找出多個拼音,表的結構為拼音在前,用空格或者TAB鍵分隔,具有此讀音的漢字緊跟在后,每個拼音及其漢字占一行,如下為其中的兩行:

 

a      啊阿呵吖嗄腌錒錒

ang  昂骯盎仰卬岇昻枊醃醠骯

 

2、可以把這個對應表保存在一個文件中,每次讀取文件進行拼音的查找。為了使用上的方便,可以把此文件作為程序資源的一部分,附加在應用程序中,以后使用時只需要一個應用程序就可以正確運行了。在程序運行時候根據資源中的數據進行查找,而不需要去讀取對應表文件。本例子程序中此對應表的資源類型命名為“PYGBK”,資源的IDIDR_PYGBK1。操作應用程序中的資源需要用到一些Windows API,如下:

HRSRC FindResource(      

    HMODULE hModule,
    LPCTSTR lpName,
    LPCTSTR lpType
);
此函數用于找到程序中的資源,輸入參數分別為程序的實例句柄、資源名稱和資源類型。返回資源的句柄。
DWORD SizeofResource(      

    HMODULE hModule,
    HRSRC hResInfo
);
此函數用于得到指定資源的大小,輸入參數分別為程序的實例句柄和資源的句柄。返回資源大小的字節(jié)數。
HGLOBAL LoadResource(      

    HMODULE hModule,
    HRSRC hResInfo
);

此函數用于裝入指定的資源,輸入參數分別為程序的實例句柄和資源的句柄。返回指向資源數據的指針。

以上的Windows API的詳細使用方法請參考MSDN

 

3、在開始查找漢字拼音之前,需要判斷輸入的漢字是否合法。比如用戶輸入了英文字符就會產生錯誤信息。對于簡體中文漢字來說,每個漢字由兩個字節(jié)組成,第一個字節(jié)的范圍為0xA1~0xFF,第二個字節(jié)的范圍為0x400xFF,根據此條件就可以判斷輸入的字符是否合法,程序上實現如下:

 

unsigned char ch = buf[j];

if( (((j+2)%2==0&& ch<0xA1|| (((j+2)%2)==1 && ch<0x40) )

                        
{

                                       
// 不合法的字符,返回

                        }


其中:buf為輸入的漢字字符串(最多10個漢字20個字符),j為位移

        ((j+2)%2==0)表示ch為漢字的第一個字節(jié)

((j+2)%2==1)表示ch為漢字的第二個字節(jié)

有關漢字編碼和拼音的知識請參考其他文檔。

 

一、編程實現

1  創(chuàng)建一個基于對話框的MFC應用程序。

2  制作界面,如下圖1所示:

3  把漢字拼音對應表導入為資源,定義資源名字為“PYGBK”,自動生成資源IDIDR_PYGBK1,這里需要注意的是在此資源的屬性框中去掉“External file”的選擇(缺省為選擇),這樣對應表才能真正導入到應用程序中,達到與外部文件的分離。

4  為輸入框定義一個CString類型的變量m_Edit1,為列表框定義一個CListBox類型的變量m_List1

為查找按鈕添加相應的關聯函數,并在此函數中添加查找拼音的代碼。具體算法為查找對應表中的所有漢字,如果找到就再查找其拼音并把與此漢字對應的所有拼音顯示在列表框中。下圖2為查找漢字串“蒹葭蒼蒼白露為霜”的結果。

5、主要函數代碼:

 1// 查找按鈕對應的函數
 2void CLookPYDlg::OnSearch() 
 3{
 4    m_List1.ResetContent();
 5    UpdateData();
 6    m_Edit1.TrimLeft();
 7    m_Edit1.TrimRight();
 8    if(m_Edit1.IsEmpty())    return;
 9    UINT i;
10    unsigned char ch;
11    for(int j=0; j<m_Edit1.GetLength(); j++)
12    {
13        ch = m_Edit1.GetAt(j);    // 漢字串中的第 i 個字符
14        // 判斷漢字是否合法
15        if( (((j+2)%2==0&& ch<0xA1|| (((j+2)%2)==1 && ch<0x40) )
16        {
17            MessageBox("輸入了非法的字符!", NULL, MB_ICONWARNING);
18            return;
19        }

20    }

21
22    HRSRC HGBSrc;
23    LPVOID GBTemp;
24    // 查找對應表資源
25    HGBSrc = FindResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_PYGBK1),"PYGBK");
26    if(HGBSrc == NULL)    return;
27    // 得到對應表數據的大小
28    DWORD size = SizeofResource(AfxGetInstanceHandle(), HGBSrc);
29    // 裝入對應表
30    HGLOBAL m_HGBStr = LoadResource(AfxGetInstanceHandle(), HGBSrc);
31    // 鎖定資源并得到數據指針
32    GBTemp = LockResource(m_HGBStr);
33    // 轉換為 char 類型的指針
34    char *buf = (char *)GBTemp;
35
36    char hzstr[21], ss[50];
37    strcpy(hzstr, m_Edit1);
38    for(i=0; i<10; i++)    arPY[i][0]=0;
39    // 調用查找拼音的函數
40    this->SearchHZPY(buf, size, hzstr);
41    // 在列表框中顯示結果
42    for(i=0; i<strlen(hzstr)/2; i++)
43    {
44        sprintf(ss, "%c%c - %s", hzstr[i*2], hzstr[i*2+1], arPY[i]);
45        m_List1.AddString(ss);
46    }

47}

48
49/*
50    查找拼音的函數
51    輸入:    buf - 拼音和漢字的對應表數組
52            size- 此數組的大小
53            hzstr - 輸入的漢字串,最多10個漢字
54    返回:true, 結果保存在 arPY 數組,arPY 為 10×50的字符數組,
55            用于保存與漢字對應的所有拼音
56*/

57bool CLookPYDlg::SearchHZPY(char *buf, long size, char *hzstr)
58{
59    char *ptr, str[1000], szPY[10], szHZ[1000];
60    long i, j, k, start=0, len, len2;
61    len2 = strlen(hzstr);    // 輸入的漢字串的長度
62    for(i=0; i<size; i++)
63    {
64        if(buf[i]==0x0a)    // 到達行末
65        {
66            ptr = &buf[start];
67            len = i-start;    // 此行的長度
68            strncpy(str, ptr, len);    // 取此行的數據
69            str[len]=0;
70            start = i+1;    // 定位下一行的開始位置
71
72            sscanf(str, "%s %s", szPY, szHZ);    // 分離拼音和對應的漢字
73            len=strlen(szHZ);
74            // 循環(huán)查找
75            for(j=0; j<len; j=j+2)
76            {
77                for(k=0; k<len2; k=k+2)
78                {
79                    // 找到匹配結果
80                    if(szHZ[j]==hzstr[k] && szHZ[j+1]==hzstr[k+1])
81                    {
82                        strcat(arPY[k/2], szPY);
83                        strcat(arPY[k/2], "");
84                    }

85                }

86            }

87        }

88    }

89    return true;
90}


 

一、             小結

本文從原理和編程實現方面簡單的介紹了漢字拼音查找的方法,并簡單演示了怎么使用應用程序的資源。實現的關鍵為建立一張漢字和拼音的對應表并導入到應用程序中以達到應用程序與外部文件的分離。本程序在Windows98/2000環(huán)境使用VC++6.0編譯通過。

11.jpg

posted on 2005-11-30 00:25 冰凍熱狗 閱讀(8969) 評論(28)  編輯 收藏 引用 所屬分類: 應用程序

評論

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

太感動了...正尋找中。。。。。我是說呀,VC使用這么廣泛,怎么可能沒有VC的漢字轉拼音的代碼?


樓主,感謝中。。。
2006-03-01 21:28 | King

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

不過大哥怎么沒把源代碼一起上傳呀。。
2006-03-01 21:33 | King

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

老大 我想跟你聯系下,討論下你的這個程序啊。你的程序運行不了,我已經修改了。但是現在的問題是讀字典的時候讀取的是null.
2006-05-16 15:01 |

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

什么意思?不懂,留下郵件地址或者聯系我:comwell@126.com
2006-05-21 22:23 | 冰凍熱狗

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

測試一下 "劃" 字 很多字是不對的,他的那張表不準
2006-06-21 09:04 | 沒用的

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

“劃”-guo, hua, huai
你用全拼輸入法,這三種拼音都可以打出“劃”字,
很多字不對?還有那些字不對?請明示一下。
2006-06-22 12:44 | 冰凍熱狗

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

2007-10-09 20:43 | 夫人法

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

我編寫的結果是:列表框中只顯示輸入的漢字沒有拼音,怎么解決
2008-01-11 18:05 | 真想學

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

這個原因就太多了,不知道你程序是怎么寫的。就這樣一句話,就別人怎么跟你說?
2008-01-12 00:00 | 冰凍熱狗

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

尊敬的老師:
我按著你的教導,作了一個漢字拼音查找程序結果一直運行挺好,朋友非要給他用.我就把VC++的DEBUG中的目錄中的PookPY.exe文件壓縮后傳給了他,結果不能用.一運行就提示:找不到MFC42D.DLL文件,希望你能告訴我,怎么做,朋友才能用我的PookPY.exe文件.謝謝,祝你春節(jié)好.全家幸福快樂.
2008-02-03 19:48 | 湯光大

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

這是VC的基本常識啦,重新編譯一個Release版本就可以了,DEBUG版本的不能給別人用的。
2008-02-05 01:40 | 冰凍熱狗

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

很不好意思,我是剛學習VC的老頭,所以連VC的基本常識都沒有的,因為不會就得向老師求教.
這也就是說“重新編譯一個Release版本就可以了”這個知識我根本就沒有接觸過,麻煩老師。把我當成一個“白丁”(采鳥都不夠)那個水平給我說說,怎么“編譯一個Release版本”最好從頭一步一步的給我講一遍(我用的VC++6.0),老翁這里有禮了,謝謝好心的老師,謝謝。
2008-02-05 09:41 | 湯光大

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

我暈~~~看來兄臺還要加強一下基礎知識。

打開LookPY的工程后,在VC的界面中選擇“Build”菜單下面的“Set Active Configuration”,出現一個對話框,選擇“Win32 - Release”那一項,按“OK”確認,并重新編譯工程,就會產生一個Release目錄,其中包含了LookPY.exe文件,這個文件才能分發(fā)給別人使用。而DEBUG目錄中的exe文件必須用到MFC42D.DLL文件,如果機器沒有裝VC,是沒辦法運行的。
2008-02-06 02:01 | 冰凍熱狗

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

尊敬的老師VC的Release文件我做上了,你能否知道一個什么也不會的人.把想要會的東西學會了的高興心情是什么樣的嗎,除夕夜我了壞了.這個幸福是你給我的.因此再一次感謝老師!
我感到VC該學的東西太多了.
我還想向你請教:你發(fā)表的主要函數代碼:每一行前面的代碼和代碼后面的豎線以及符號怎么加上的?謝謝.
2008-02-07 17:08 | 湯光大

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

大家互相學習啦,慢慢積累就會知道越多的了。
可以收縮的豎線是網站提供的功能,你粘貼代碼進入會自動產生的;另外,VC6本身不支持這個功能,Visual Studio 2003以上的版本支持這個功能,有空體驗一下吧。
2008-02-08 00:08 | 冰凍熱狗

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

能否傳份源代碼給我,多謝,miracle@163.com
2008-08-20 10:53 | miracle

# re: 用VC++6.0編程實現漢字拼音查找[未登錄]  回復  更多評論   

您好老師,我按照您的方法編寫完程序后,在列表框中顯示的是“??”而不是拼音和漢字,請問這是什么原因呢?我用的資源表是windows自帶的那個字符表。
2009-04-08 17:49 | 波波

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

能否發(fā)一分源代碼給我作參考。
謝謝!yuancan@139.com
2009-12-11 11:55 | yuancan318

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

能否把源碼發(fā)一份呢,謝謝
xuanwu1015@163.com
2010-02-25 23:10 | xv

# re: 用VC++6.0編程實現漢字拼音查找[未登錄]  回復  更多評論   

好幾年前的帖子了,不知道樓主還經常上blog否,能把源碼發(fā)一份給我么,謝謝,我找了一個碼表,里面有太多的if判斷了,效率不好,查表法效率應該會高點
wgy516@163.com
謝謝
2010-03-23 18:14 | wgy

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

樓主 可以把源代碼發(fā)一份給我嗎?
jlkim_007@163.com
2011-05-21 13:17 | jlkim

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

最近,在編vc,連數據庫時,想按拼音查找,不知道怎樣弄,能否把這個例子的代碼,發(fā)到郵箱,參考一下,謝謝啊 hbjzjllxh@163.com
2011-05-27 17:31 | lixiaohong

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

樓主你好,能把源碼程序給我發(fā)一份,學習學習嗎?謝謝了!!azhanjun_66@126.com,不勝感激!
2011-06-28 20:42 | 夢在遠方

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

樓主你好,發(fā)一份源碼行嗎,找了很多,覺得都不太好用,mch312@163.com
2011-08-12 18:09 | mch312

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

樓主,給分源代碼好嗎,我找了很久
2011-10-04 10:38 |

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

請教:我想用自己編的字庫:里面有漢字,數字,字母的代碼,我最后想找出并保存的是他們的代碼,怎么做到?
2011-11-09 11:16 | yanghs

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

我的QQ:382249167,麻煩了
2011-11-09 11:17 | yanghs

# re: 用VC++6.0編程實現漢字拼音查找  回復  更多評論   

樓主你好,能把源碼程序給我發(fā)一份學習學習嗎?謝謝了!!1422461141@qq.com,不勝感激!
2013-11-04 17:24 | 馮博博
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品黄色| 亚洲国内高清视频| 国产日韩欧美日韩大片| 欧美日韩一区在线观看视频| 欧美第一黄网免费网站| 欧美成人免费全部观看天天性色| 欧美高清在线精品一区| 欧美日韩国产三级| 国产精品久久77777| 国产欧美大片| 亚洲第一视频| 一区二区三区久久久| 亚洲免费在线视频一区 二区| 亚洲永久精品国产| 久久久精品2019中文字幕神马| 久久综合999| 亚洲国产成人av在线| 一本色道久久综合亚洲精品按摩| 亚洲一区二区三区精品视频| 久久精品在线视频| 欧美日本国产视频| 国产一区二区日韩精品| 亚洲人午夜精品| 午夜欧美大片免费观看| 欧美成人国产一区二区| 国产精品99久久久久久有的能看 | 欧美三日本三级少妇三99| 国产欧美日韩一区二区三区在线观看| 午夜伦欧美伦电影理论片| 国产乱子伦一区二区三区国色天香| 亚洲激情视频在线播放| 久久九九久精品国产免费直播| 国产精品自拍网站| 有码中文亚洲精品| 一本色道久久综合亚洲精品不卡| 亚洲综合日韩中文字幕v在线| 玖玖视频精品| 亚洲美女在线看| 午夜影视日本亚洲欧洲精品| 乱人伦精品视频在线观看| 国产精品视频福利| 亚洲人成高清| 久久久久久久成人| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久综合久久综合久久| 欧美性猛交99久久久久99按摩 | 国产亚洲欧美一区| 亚洲午夜小视频| 亚洲人成高清| 欧美成人国产| 亚洲国产1区| 免费高清在线视频一区·| 亚洲欧美日韩久久精品| 国产精品理论片在线观看| 中文高清一区| 日韩亚洲视频在线| 欧美日韩一区三区| 亚洲视频福利| 在线综合亚洲欧美在线视频| 欧美精品免费视频| 日韩一级免费| 91久久久亚洲精品| 欧美国产91| 99爱精品视频| 一本到高清视频免费精品| 欧美日韩在线三区| 亚洲欧美一区二区在线观看| 亚洲在线国产日韩欧美| 国产视频在线观看一区二区| 欧美一区二区三区另类| 性做久久久久久久免费看| 99精品视频一区| 日韩视频永久免费| 欧美日韩国产bt| 一区二区三区日韩精品| 99pao成人国产永久免费视频| 欧美激情综合网| 一区二区三区免费观看| 99re6这里只有精品| 欧美三级日本三级少妇99| 亚洲欧美日韩一区二区三区在线 | 小嫩嫩精品导航| 国内一区二区在线视频观看| 蜜臀av一级做a爰片久久| 麻豆成人小视频| 中文日韩欧美| 亚洲欧美日韩第一区| 在线免费观看日韩欧美| 亚洲破处大片| 国产色产综合色产在线视频 | 亚洲综合精品一区二区| 国内精品久久久久久久影视蜜臀 | 韩日欧美一区二区| 亚洲国产合集| 国产精品你懂的| 欧美成人蜜桃| 国产精品美女久久久久av超清| 久久久久国产精品www| 欧美电影打屁股sp| 欧美亚洲在线观看| 欧美暴力喷水在线| 欧美一区激情| 欧美激情精品久久久久久大尺度| 欧美一级二区| 欧美日韩成人综合天天影院| 久久久99爱| 欧美日韩在线播放一区二区| 久久综合久久综合久久| 国产精品成人一区| 亚洲电影专区| 永久域名在线精品| 亚洲女人av| 亚洲一区二区精品| 欧美阿v一级看视频| 久久人人超碰| 国产老女人精品毛片久久| 亚洲精品视频一区二区三区| 在线观看国产精品网站| 香蕉久久一区二区不卡无毒影院 | 欧美一区二区性| 亚洲精品欧洲| 久久先锋资源| 国产精品视频精品| 99这里只有精品| 久久久久久久综合| 午夜视频一区| 欧美日韩亚洲一区二区三区在线| 欧美h视频在线| 伊人成人在线视频| 欧美一区二区三区的| 亚洲伊人一本大道中文字幕| 欧美激情在线免费观看| 欧美激情第二页| 极品av少妇一区二区| 欧美亚洲一区二区在线| 欧美在线观看一区| 国产精品一区二区黑丝| 中文一区二区在线观看| 亚洲伊人观看| 国产精品无码永久免费888| 亚洲深夜福利视频| 亚洲一区在线免费观看| 国产精品久久久久久一区二区三区| 99精品视频免费在线观看| 亚洲理伦电影| 欧美日韩国产影片| 亚洲美女免费视频| 亚洲欧美激情四射在线日| 国产精品久久久久久久久久免费看| 99热这里只有精品8| 亚洲欧美日韩在线观看a三区| 国产精品一区久久久久| 欧美一级夜夜爽| 免费成人激情视频| 亚洲肉体裸体xxxx137| 欧美日韩成人一区二区| 亚洲香蕉网站| 久久深夜福利免费观看| 最新国产乱人伦偷精品免费网站| 欧美成人性生活| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲麻豆视频| 国产免费成人av| 欧美在线亚洲综合一区| 欧美黄色一区二区| 亚洲男人第一网站| 黄色日韩网站视频| 欧美精品在线观看一区二区| 亚洲精品久久久久久久久久久久久 | 国产香蕉久久精品综合网| 久久久久久久久久久成人| 免费观看在线综合| 中文无字幕一区二区三区| 国产欧美在线视频| 久久久久久久成人| 日韩视频第一页| 久久精品国产亚洲精品 | 国产精品第2页| 久久精品中文字幕免费mv| 亚洲国产欧美一区二区三区丁香婷| 亚洲午夜av| 亚洲国产欧美在线| 欧美日韩视频| 久久久不卡网国产精品一区| 一区二区三区免费观看| 国产精品男女猛烈高潮激情| 亚洲一级特黄| 欧美r片在线| 亚洲自拍啪啪| 亚洲人线精品午夜| 国产精品社区| 久久一区中文字幕| 亚洲欧美在线网| 最新国产成人在线观看| 久久天天躁夜夜躁狠狠躁2022| 99热在这里有精品免费| 欧美激情小视频| 亚洲激情电影在线| 蜜桃久久精品乱码一区二区| 亚洲在线中文字幕|