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

edog

冰凍熱狗
數據加載中……

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

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

eDog[原創]

摘要   使用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
);
此函數用于得到指定資源的大小,輸入參數分別為程序的實例句柄和資源的句柄。返回資源大小的字節數。
HGLOBAL LoadResource(      

    HMODULE hModule,
    HRSRC hResInfo
);

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

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

 

3、在開始查找漢字拼音之前,需要判斷輸入的漢字是否合法。比如用戶輸入了英文字符就會產生錯誤信息。對于簡體中文漢字來說,每個漢字由兩個字節組成,第一個字節的范圍為0xA1~0xFF,第二個字節的范圍為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為漢字的第一個字節

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

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

 

一、編程實現

1  創建一個基于對話框的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            // 循環查找
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環境使用VC++6.0編譯通過。

11.jpg

posted on 2005-11-30 00:25 冰凍熱狗 閱讀(8981) 評論(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文件.謝謝,祝你春節好.全家幸福快樂.
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文件,這個文件才能分發給別人使用。而DEBUG目錄中的exe文件必須用到MFC42D.DLL文件,如果機器沒有裝VC,是沒辦法運行的。
2008-02-06 02:01 | 冰凍熱狗

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

尊敬的老師VC的Release文件我做上了,你能否知道一個什么也不會的人.把想要會的東西學會了的高興心情是什么樣的嗎,除夕夜我了壞了.這個幸福是你給我的.因此再一次感謝老師!
我感到VC該學的東西太多了.
我還想向你請教:你發表的主要函數代碼:每一行前面的代碼和代碼后面的豎線以及符號怎么加上的?謝謝.
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編程實現漢字拼音查找  回復  更多評論   

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

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

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

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

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

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

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

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

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

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

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

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

樓主你好,發一份源碼行嗎,找了很多,覺得都不太好用,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編程實現漢字拼音查找  回復  更多評論   

樓主你好,能把源碼程序給我發一份學習學習嗎?謝謝了!!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>
            欧美视频一区二区三区在线观看 | 日韩写真视频在线观看| 一区二区三区四区国产| 亚洲激情不卡| 亚洲激情在线激情| 精品福利电影| 在线观看日韩av电影| 伊人夜夜躁av伊人久久| 国产有码在线一区二区视频| 国产区亚洲区欧美区| 久久综合导航| 久久亚洲综合色| 欧美国产综合| 亚洲美女尤物影院| 99精品国产一区二区青青牛奶| 亚洲福利视频一区二区| 欧美成人精品高清在线播放| 欧美www视频| 亚洲黄色视屏| 亚洲午夜精品网| 亚洲欧美一区二区三区极速播放| 在线性视频日韩欧美| 一区二区三区欧美成人| 午夜精品一区二区三区在线 | 亚洲精品美女91| 99视频有精品| 欧美一区2区三区4区公司二百| 午夜一区不卡| 欧美大片91| 一区二区三区四区五区精品视频| 亚洲高清视频在线| 一区二区欧美日韩视频| 欧美伊人久久久久久久久影院| 久久久噜噜噜久久中文字免| 欧美风情在线观看| 国产精品伊人日日| 国产日产欧产精品推荐色 | 99热在线精品观看| 日韩亚洲欧美成人一区| 亚洲综合视频一区| 欧美高清视频| 国产欧美精品一区二区三区介绍| 伊人精品成人久久综合软件| 一区二区三区欧美激情| 99热在这里有精品免费| 欧美制服丝袜第一页| 亚洲高清久久| 亚洲综合久久久久| 欧美了一区在线观看| 国内外成人免费激情在线视频| 一本久道综合久久精品| 久久一区二区三区超碰国产精品| 亚洲美女视频| 欧美一区三区二区在线观看| 欧美成人精品福利| 国产精品99一区二区| 亚洲电影有码| 久久久999精品| 亚洲视频中文字幕| 欧美人成在线| 91久久午夜| 尤物九九久久国产精品的分类| 亚洲伊人观看| 亚洲人午夜精品免费| 美女黄色成人网| 国产亚洲精品v| 欧美一区二区三区四区高清| 日韩亚洲精品视频| 久久久亚洲影院你懂的| 国产日韩欧美视频在线| 午夜在线a亚洲v天堂网2018| 一本色道久久综合狠狠躁篇怎么玩| 久久亚洲综合色一区二区三区| 欧美日韩成人综合| 99在线精品视频在线观看| 亚洲第一福利视频| 男人插女人欧美| 亚洲国产精品一区在线观看不卡| 久久在线免费| 亚洲一区二区在线免费观看视频 | 欧美视频一区二区三区| 亚洲视频在线观看网站| 亚洲精品久久7777| 欧美美女bb生活片| 正在播放日韩| 亚洲午夜未删减在线观看| 国产精品免费看片| 久久精品91| 一本色道久久综合亚洲精品小说 | 欧美成人精品激情在线观看| 你懂的视频一区二区| 亚洲欧洲日产国产网站| 久久精品国产2020观看福利| 欧美一站二站| 亚洲国产日韩欧美在线99 | 免费亚洲视频| 性高湖久久久久久久久| 欧美h视频在线| 欧美一区二区三区视频免费| 久久一二三四| 亚洲欧美日韩国产中文在线| 久久色中文字幕| 亚洲女优在线| 模特精品在线| 久久免费精品日本久久中文字幕| 欧美日本国产一区| 麻豆乱码国产一区二区三区| 欧美色精品天天在线观看视频 | 精品成人在线观看| 亚洲视频一区二区免费在线观看| 亚洲电影免费观看高清完整版| 亚洲欧美成人一区二区三区| 亚洲国产精品ⅴa在线观看| 亚洲视频网在线直播| 久久精品二区| 亚洲欧美综合网| 欧美日韩精品免费| 欧美护士18xxxxhd| 亚洲电影免费观看高清| 久久疯狂做爰流白浆xx| 性做久久久久久| 欧美午夜理伦三级在线观看| 亚洲福利视频一区二区| 亚洲成人在线网| 亚洲欧美日韩一区二区三区在线观看 | 亚洲高清不卡在线观看| 欧美亚洲免费电影| 午夜精品久久久久久久久久久久久 | 亚洲欧美电影院| 宅男噜噜噜66一区二区 | 久久精品一区蜜桃臀影院| 午夜在线电影亚洲一区| 国产精品久久久久高潮| 一区二区三区日韩欧美精品| 一本色道久久综合亚洲精品不卡 | 久久久xxx| 免费精品视频| 136国产福利精品导航| 久久久久久九九九九| 蜜桃av综合| 亚洲精品自在久久| 欧美日本在线观看| 在线综合视频| 香蕉亚洲视频| 国产一区av在线| 久久久久国产精品厨房| 欧美成年人网站| 亚洲乱码久久| 欧美日韩精品在线| 亚洲天堂av电影| 欧美在线一区二区| 影院欧美亚洲| 欧美激情一区二区三区高清视频| 亚洲欧洲视频| 亚洲欧美日韩精品| 激情欧美日韩| 欧美久久婷婷综合色| 亚洲综合精品四区| 欧美不卡在线| 亚洲综合色在线| 国内偷自视频区视频综合| 免费日韩成人| 亚洲一区日韩在线| 欧美大片免费观看| 亚洲欧美www| 亚洲第一区在线| 国产九区一区在线| 欧美主播一区二区三区美女 久久精品人| 亚洲国产欧美一区二区三区久久| 欧美视频福利| 国产精品久久久久久久久婷婷| 欧美精品亚洲二区| 欧美成人久久| 欧美激情第1页| 欧美国产日韩在线| 欧美va天堂在线| 欧美大色视频| 欧美日韩国产区| 欧美视频中文字幕| 国产精品萝li| 国产日韩欧美在线播放| 国产亚洲欧洲| 一区精品在线播放| 亚洲电影免费观看高清完整版在线观看| 国产自产v一区二区三区c| 好吊日精品视频| 亚洲成人在线网站| 亚洲精品国久久99热| 亚洲网站啪啪| 亚洲国产精品va在看黑人| 久久一区二区三区四区五区| 亚洲视频精品| 亚洲人www| 在线不卡中文字幕播放| 国产老女人精品毛片久久| 欧美日韩综合视频网址| 欧美成人精品激情在线观看| 久久精品国产一区二区电影| 亚洲一区欧美二区| 亚洲午夜激情|