有谁知道,如何根据录入的汉字得到其拼音吗?

9527 2000-07-17 03:29:00
刚才突然间想到这个问题,目前我开发的是商业MiS系统,如果利用这种方法给一些相应信息自动产生拼音助记码,应该会对用户的操作带来便利,有哪位高手知道吗?先行谢过了
...全文
418 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt642 2001-05-31
  • 打赏
  • 举报
回复
40914关注!
msb 2000-08-01
  • 打赏
  • 举报
回复
国标库中汉字分两部分排列,拼音和部首因此的HANK 的方法只对一部分汉字有用,
还是建一列表进行查找较好或直接从拼音输入法中转换。
csdn2000 2000-07-20
  • 打赏
  • 举报
回复
当然要采用查表检索的方法,找个汉字拼音对照库应该不难吧!
gsoft 2000-07-19
  • 打赏
  • 举报
回复
care
ta 2000-07-19
  • 打赏
  • 举报
回复
care
手指英语 2000-07-19
  • 打赏
  • 举报
回复
attention
9527 2000-07-19
  • 打赏
  • 举报
回复
感谢Hank和david_its。david_its的方法是可行的,但按照Hank的方法有一个问题,在我想处理汉字的第二个字母时好象无规律可循,是否Hank的方法仅能处理汉字的第一个字母?如想得到一汉字的完整拼音,是否只有david_its的‘表参照法’了。另外我想问问两位,中文输入法好象也是采用了‘表检索’的方法,他们的检索表好象存放在*.ime中,我们有可能直接利用他们的表吗?谢谢回复。
david_jts 2000-07-18
  • 打赏
  • 举报
回复
金山词霸(2.0-2000版本)内有gb2py.idx和gbk2py.idx,内有国标
GB、GBK的每个汉字的拼音和声调。可用拿来一用。

下面上Delphi写的gb2py函数。
function gb2py(hanzi:pchar):pchar;
var
Sfile:Tmemorystream;
pos,temp,ipos,len:integer;
py:array[0..20] of char;
begin
pos:=($fe-$a1)*(ord(hanzi[0])-$b0)+ord(hanzi[1])-$a1;
sfile:=Tmemorystream.create;
sfile.loadfromfile('C:\Program Files\KINGSOFT\XDICT\gb2py.idx');
//data:=sfile.memory;
sfile.Seek($1608+pos*4,soFromBeginning);
sfile.Read(ipos,4);
sfile.Read(temp,4);
len:=temp-ipos;
sfile.Seek(ipos+1,soFromBeginning);
sfile.Read(py,len);
py[len-1]:=#0;
sfile.Free;
result:=py;
end;
w102272 2000-07-17
  • 打赏
  • 举报
回复
关注。
chengrong 2000-07-17
  • 打赏
  • 举报
回复
数据库列表查找可以转换;
多音字谁知道如何处理?
Hank 2000-07-17
  • 打赏
  • 举报
回复
我有解决方案,和你的差不多,不过应该可以了,下面是具体的函数:
/********************/
function GetChinaChar(ChinaChar:String):Char;
//获取指定汉字的拼音字母
begin
case WORD(ChinaChar[1]) shl 8 + WORD(ChinaChar[2]) 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;

这只是返回第一个字母,你可以根据实际情况作相应的更改就可以自己使用了!
qiuzhi 2000-07-17
  • 打赏
  • 举报
回复
关注!
9527 2000-07-17
  • 打赏
  • 举报
回复
想知道,谢谢了

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧