有那位高手知道怎样把输入的汉字转换成拼音?(200分)

  • 主题发起人 主题发起人 a_mao_gong
  • 开始时间 开始时间
A

a_mao_gong

Unregistered / Unconfirmed
GUEST, unregistred user!
有那位高手知道怎样把输入的汉字转换成拼音?[:)]
我愿意出400分。
 
你试试这个控件,我一直使用的是这个。
http://www.inprises.com/control/pycode.zip [}:)]
 
现在是一个机遇,国家公布了新的编码规范,原则上从机内码中导,自己写吧!
 
办法很多,
http://www.delphibbs.com/delphibbs/dispq.asp?lid=490828
http://www.delphibbs.com/delphibbs/dispq.asp?lid=154720
win98,nt上附件中都一个输入法生成器(缺省安装是没有,但你用windows的
添加/删除程序 功能将其安装上),这样你就可以将全拼输入法等的ime文件转
化为编码文件(txt格式)。
然后自己写点代码,先将词组去掉。
再写代码,将txt文件直接读到二维string数组,读一个汉字查一个拼音就行了,
最后将读到的拼音就行了。
我有源代码, Bc, VC , VB, delphi, Cbuilder都有,都是以前初学程序做的,
需要的话,可以给你发过来。
 
我的源程序,考给你:

unit hztopy;//汉字to拼音

interface
uses Windows, Messages, SysUtils, Classes, Forms,
Controls, ComCtrls, CommCtrl, DsgnIntf, dialogs;

function GetPYIndexChar(hzchar: string): string; //返回一个汉字的拼音首字符
function getpystring(hzstring: string): string; //返回一个汉字串的拼单首字符串
function SearchByPYIndexStr(SourceStrs: TStrings; PYIndexStr: string): string; //从Tstrings 中找到所有拼音首字符串中有PYindexstr的字符串

implementation

function getpystring(hzstring: string): string;
var
i: integer;
str: array[1..255] of string;
hz: string;
hzstr: string;
begin
hzstr := hzstring;
i := 0;
while hzstr <> '' do
begin
if (ord(hzstr[1]) >= 33) and (ord(hzstr[1]) <= 126) then
begin
str := copy(hzstr, 0, 1);
hzstr := copy(hzstr, 2, length(hzstr) - 1);
end
else if ord(hzstr[1]) > 127 then
begin
hz := copy(hzstr, 0, 2);
hzstr := copy(hzstr, 3, length(hzstr) - 2);
str := getpyindexchar(hz);
end;
if result = '' then result := str
else result := result + str;
i := i + 1;
end;
end;

function GetPYIndexChar(hzchar: string): string;
begin
case WORD(hzchar[1]) shl 8 + WORD(hzchar[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;

function SearchByPYIndexStr(SourceStrs: TStrings; PYIndexStr: string): string;
label NotFound;
var
i, j: integer;
hzchar: string;
begin
for i := 0 to SourceStrs.Count - 1 do
begin
for j := 1 to Length(PYIndexStr) do
begin
hzchar := SourceStrs[2 * j - 1]
+ SourceStrs[2 * j];
if (PYIndexStr[j] <> '?') and
(UpperCase(PYIndexStr[j]) <>
GetPYIndexChar(hzchar)) then goto NotFound;
end;
if result = '' then result := SourceStrs
else result := result + Char(13) + SourceStrs;
NotFound:
end;
end;

end.
 
上面有一行写错了,改正如下:
$CEF4..$D1B8: result := 'X';
 
谢谢,已经解决了![:)]
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部