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

edog

冰凍熱狗
數據加載中……

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

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

eDog[原創]

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

關鍵字   漢字,拼音,資源

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

一、             引言

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

 

二、             基礎知識

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 冰凍熱狗 閱讀(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文件.謝謝,祝你春節好.全家幸福快樂.
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編程實現漢字拼音查找  回復  更多評論   

樓主你好,能把源碼程序給我發一份,學習學習嗎?謝謝了?。zhanjun_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編程實現漢字拼音查找  回復  更多評論   

樓主你好,能把源碼程序給我發一份學習學習嗎?謝謝了?。?422461141@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>
            亚洲男女毛片无遮挡| 久久久国产91| 亚洲高清在线播放| 亚洲亚洲精品三区日韩精品在线视频| 欧美日韩国产精品一卡| 日韩一区二区精品视频| 亚洲国产精品va在线看黑人| 嫩草国产精品入口| 久久亚洲捆绑美女| 日韩一级大片在线| 亚洲欧洲精品成人久久奇米网| 欧美片在线播放| 亚洲欧美怡红院| 久久精品日产第一区二区| 亚洲区国产区| 夜夜嗨一区二区| 国内精品模特av私拍在线观看| 欧美福利一区| 国产精品久久久久久一区二区三区| 午夜精品区一区二区三| 久久久久www| 一区二区三区精品| 先锋影音一区二区三区| 91久久国产综合久久蜜月精品| 亚洲欧洲三级电影| 国产欧美在线观看一区| 欧美韩日精品| 国产精品区一区二区三区| 老**午夜毛片一区二区三区| 欧美日韩高清在线一区| 久久久夜夜夜| 欧美性片在线观看| 欧美成人免费在线观看| 国产美女精品一区二区三区 | 美国成人直播| 羞羞色国产精品| 欧美国产高清| 欧美一区不卡| 欧美日韩中文字幕在线| 欧美大学生性色视频| 国产精品一区二区你懂得| 亚洲欧洲另类| 狠狠综合久久| 亚洲一区二区久久| 99在线精品观看| 久久这里只精品最新地址| 欧美亚洲日本一区| 欧美日韩中文在线观看| 亚洲高清不卡| 经典三级久久| 午夜精品一区二区三区电影天堂 | 欧美日韩国产在线播放网站| 美女91精品| 国内精品久久久久伊人av| 亚洲一区二区三区中文字幕在线| 91久久精品久久国产性色也91| 欧美亚洲一区在线| 亚洲视频一二三| 欧美日韩国产首页在线观看| 亚洲国产二区| 最近中文字幕mv在线一区二区三区四区 | 欧美日本一区二区三区| 亚洲国产精品免费| 亚洲欧洲一级| 欧美黄色大片网站| 亚洲国产日韩综合一区| 91久久综合| 欧美日韩1区2区3区| 亚洲精品视频中文字幕| 亚洲国产清纯| 99精品视频免费在线观看| 免费成人高清| 亚洲国产日韩欧美| 一本久久青青| 欧美日韩在线精品| 一区二区三区成人精品| 亚洲国产精品久久久久久女王| 久久久精品午夜少妇| 久久嫩草精品久久久久| 狠狠久久亚洲欧美| 久久夜精品va视频免费观看| 欧美jizzhd精品欧美巨大免费| 1000部国产精品成人观看| 男女激情视频一区| 亚洲人成绝费网站色www| 亚洲视频欧美视频| 国产日韩欧美精品| 美国成人直播| 亚洲视频一区二区在线观看| 久久精品国产v日韩v亚洲| 精品成人在线| 欧美日韩成人激情| 亚洲欧美日韩人成在线播放| 久久久爽爽爽美女图片| 亚洲精品美女在线| 欧美日韩一区二| 亚洲免费在线| 免费成人高清视频| 免费在线看一区| 日韩午夜在线播放| 国产欧美一区二区三区在线看蜜臀| 欧美一区二区免费观在线| 欧美大片一区二区| 亚洲影音一区| 91久久精品国产91久久性色| 国产精品毛片在线看| 午夜精品福利电影| 亚洲激情亚洲| 久久人人超碰| 亚洲男人的天堂在线观看| 在线观看视频日韩| 国产精品久久久久久久久| 久久亚洲一区| 亚洲女优在线| 日韩视频免费看| 欧美福利一区| 久久精品视频免费播放| 中文在线一区| 最新精品在线| 在线成人免费观看| 国产精品亚洲一区二区三区在线| 欧美成人一区二区三区片免费| 亚洲欧美日韩直播| 一区二区三区日韩欧美| 欧美黄色成人网| 免费日韩av| 久久大逼视频| 亚洲校园激情| 99精品视频免费观看视频| 亚洲经典在线看| 伊人精品视频| 黄色成人精品网站| 国产一区二区久久| 国产日韩欧美黄色| 国产日产精品一区二区三区四区的观看方式 | 在线亚洲欧美| 亚洲人成高清| 国内精品久久久久久久97牛牛| 国产精品美女久久久久aⅴ国产馆| 在线综合亚洲欧美在线视频| 99亚洲精品| 亚洲精品看片| 亚洲精品免费一二三区| 91久久精品国产91性色| 亚洲黄一区二区| 91久久在线观看| 亚洲黄色视屏| 亚洲精品在线一区二区| 亚洲黄色三级| 日韩一级精品视频在线观看| 日韩亚洲欧美成人| 亚洲午夜激情在线| 亚洲午夜伦理| 欧美一区二区在线视频| 新片速递亚洲合集欧美合集| 欧美一站二站| 麻豆视频一区二区| 欧美日本在线观看| 国产精品久久久久久久久久妞妞| 国产精品成人久久久久| 国产精品欧美精品| 国产一区二区三区网站| 亚洲福利视频一区| 99www免费人成精品| 亚洲免费影院| 可以看av的网站久久看| 欧美成人综合一区| 亚洲日本欧美| 亚洲综合色自拍一区| 久久久久久久999精品视频| 鲁大师影院一区二区三区| 欧美日韩国产精品自在自线| 国产精品夜夜夜一区二区三区尤| 国产综合色产在线精品| 亚洲理论电影网| 亚洲欧美在线免费| 嫩草伊人久久精品少妇av杨幂| 最新中文字幕亚洲| 午夜精品久久久久久久久久久久| 久久久久久久久伊人| 欧美日韩国产色综合一二三四| 国产日韩欧美综合一区| 亚洲国产三级| 欧美一区三区二区在线观看| 免费一级欧美片在线播放| 亚洲精品国产拍免费91在线| 中文亚洲欧美| 免费久久99精品国产自| 国产精品永久入口久久久| 亚洲国产精品久久久久秋霞影院 | 99在线|亚洲一区二区| 久久偷窥视频| 亚洲午夜羞羞片| 美女主播精品视频一二三四| 国产精品亚洲产品| 夜夜嗨av一区二区三区四区 | 午夜一级在线看亚洲| 亚洲黄色有码视频| 久久精品成人| 国产精品视频午夜|