失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 在delphi 7中实现获取汉字拼音首字母

在delphi 7中实现获取汉字拼音首字母

时间:2022-12-23 11:26:21

相关推荐

在delphi 7中实现获取汉字拼音首字母

公司的餐饮系统出品的助记码,还没实现自动从出品名称获取汉字拼音首字母。

所以在网上找了三种解决方法,

一种是kaguo 的使用常用汉字拼音查找方法,这种代码十分简单,实现方便,但是这种代码仅仅是一级字库,只支持三千零几个字的。

//获取中文字串的声母的字串 function GetPY( hzchar:string):char; //guozhi------------ var tmpi:integer; begin tmpi := WORD(hzchar[1]) shl 8 + WORD(hzchar[2]); case tmpi of $B0A1..$B0C4 : result := 'A'; $B0C5..$B2C0 : result := 'B'; $B2C1..$B4ED : result := 'C'; $B4EE..$B6E9 : result := 'D'; $B6EA..$B7A1 : result := 'E'; $B7A2..$B8C0 : result := 'F'; $B8C1..$B9FD : result := 'G'; $B9FE..$BBF6 : result := 'H'; $BBF7..$BFA5 : result := 'J'; $BFA6..$C0AB : result := 'K'; $C0AC..$C2E7 : result := 'L'; $C2E8..$C4C2 : result := 'M'; $C4C3..$C5B5 : result := 'N'; $C5B6..$C5BD : result := 'O'; $C5BE..$C6D9 : result := 'P'; $C6DA..$C8BA : result := 'Q'; $C8BB..$C8F5 : result := 'R'; $C8F6..$CBF9 : result := 'S'; $CBFA..$CDD9 : result := 'T'; $CDDA..$CEF3 : result := 'W'; $CEF4..$D188 : result := 'X'; $D1B9..$D4D0 : result := 'Y'; $D4D1..$D7F9 : result := 'Z'; else result := char(0); end; end;

据kaguo说“了解一下汉字转化拼音的程序,你就知道多音字分析多难处理了。 比如"很多人参加",参应该是什么?很容易分析成“人参”。这方面切实接触过,你就知道这种简单易行的分析是最合适的。”

参考地址是/t/0812/14/3267676.html

另一种是拼音库,不过有些下载没有声明到底支持多少个汉字,我统计过的一个拼音库最多支持7242个汉字,当然这个是提供源码的。这里最好的是据说“支持GBK大字符集,共可查20876个(1.0版为20588个)不同汉字的拼音或拼音首字母”的PARKE(R)柏克拼音DLL库(没有提供源码)。

参考地址是/source/136187

柏克拼音DLL只有两个函数,函数原型如下:

//获得拼音

//参数依次为: 拼音缓存区,要转换的字符,分隔符

BOOL WINAPI GetPinYin(PCHAR pBuf,PCHAR pStr,PCHAR pSeparator)

//获得拼音首字母

//参数依次为: 拼音缓存区,要转换的字符

BOOL WINAPI GetPinYinLeader(PCHAR pBuf,PCHAR pStr)

在delphi 7下调用PARKE(R)柏克拼音DLL库,调用代码如下

function GetPinYinLeader(pBuf : PChar;pStr : PChar): Boolean; stdcall; external 'Pinyin.dll';//声明库中的方法procedure TForm1.btn3Click(Sender: TObject);varstr1 : string;Pstr2 : Pchar;beginstr1 := Trim(edt1.Text);//一定要分配内存,要不就出现访问地址错误 Pstr2 := StrAlloc(256); //给字符指针(PChar、PWideChar、PAnsiChar)分配内存, 最佳选择是: StrAlloc.(这句来自万一的博客)GetPinYinLeader(Pstr2,PChar(str1));edt2.Text := string(Pstr2);StrDispose(Pstr2);end;

经过测试这四个字“吴2黨饐”得到的字符串是"w2dy"。结果应该是不错的。

ps:以前在delphi没调用过C写的dll库,今天就学习一回。

在C++builder6中动态调用的方法,(静态的调用试验没成功,主要是用implib没法生成正确的Pinyin.lib,内容缺文件名,一启动就报找不到文件,不知道谁可以帮忙解决这个问题)

void __fastcall TForm1::btn1Click(TObject *Sender){HINSTANCE PinYinAPI;bool _stdcall (*GetPinYinLeader)(char * ,char *);PinYinAPI = LoadLibrary("Pinyin.dll");(FARPROC)GetPinYinLeader=GetProcAddress(PinYinAPI,"GetPinYinLeader");//FARPROC不知道是做什么用的,大概是转换什么指针类型的,在c++builder帮助中没有这样的解释。不加这个,编译不过去的char cbuf[256]={0};memset(cbuf,0,sizeof(cbuf));char * cinput;cinput = (Trim(edt1->Text)).c_str();GetPinYinLeader(cbuf,cinput);edt2->Text = cbuf;FreeLibrary(PinYinAPI);}

最后一种是从微软拼音输入法取出拼音库.必须安装“微软拼音输入法”,反查只能查询一个字的。查不了一个词组的。(当然经过适当的代码可以查出词组)

参考地址:/t/1118/09/3563659.html

如果觉得《在delphi 7中实现获取汉字拼音首字母》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。