一个超简单的取汉字首拼函数

gues1688 2011-12-04 10:38:42
在网络搜索了很多delphi汉字取首拼代码,发现都比较麻烦,偶然在Excel的代码中,发现利用'八嚓哒妸发旮铪讥讥咔垃妈拿哦妑七然仨他哇哇哇夕丫匝咗',可以非常简单的达到目的。不过无法直接运用到delphi,经反复分析,终于移植到delphi,代码分享如下:

function py(strHz:WideString):string ;
var
strJZ,s1,s2:WideString;
i,k:Integer;
strPY:string;
begin
strJZ:='八嚓哒妸发旮铪讥讥咔垃妈拿哦妑七然仨他哇哇哇夕丫匝咗';//分隔基准
for i:=1 to Length(strHz) do
begin
k:=0;
repeat
inc(k);
s1:=Copy(strJZ,k,1);
s2:=Copy(strHz,i,1);
until WideCompareText(s1,s2)>0; //这里的函数WideCompareText是关键!
strPY := strPY + Chr(64 + k);
end;
Result:=strPY;
end;
...全文
325 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
皮卡 2011-12-05
  • 打赏
  • 举报
回复
这个确实很有用,收藏一下
ccrun.com 2011-12-05
  • 打赏
  • 举报
回复
如果遇到多音字呢。
Antineutrino 2011-12-05
  • 打赏
  • 举报
回复
就是说只对gb2312有用,unicode就不行了,因为unicode不是按拼音排的
不过还是要顶一下
cankoo 2011-12-05
  • 打赏
  • 举报
回复
好好好好。
林石公 2011-12-05
  • 打赏
  • 举报
回复
这个思路很好,老夫得顶一下
iqyely 2011-12-05
  • 打赏
  • 举报
回复
谢谢分享。
linghengmao 2011-12-05
  • 打赏
  • 举报
回复
不錯不錯,謝謝分享。
三界 2011-12-05
  • 打赏
  • 举报
回复
处理时,再增加一个是否汉字字符的判断,就完美了,
但就是不知道该方法对于5000个常用汉字之外的汉字的拼音判断是否准确。
gues1688 2011-12-05
  • 打赏
  • 举报
回复
代码中用到的关键函数WideCompareText,在dephi的帮助中是这样描述的:
引用
Compares Unicode strings based on the current locale without case sensitivity.
Unit
SysUtils
Category
Unicode routines
Delphi syntax:
function WideCompareText(const S1, S2: WideString): Integer;
C++ syntax:
extern PACKAGE int __fastcall WideCompareText(const WideString S1, const WideString S2);
Description
WideCompareText compares S1 to S2, without case sensitivity. The compare operation is controlled by the current locale. WideCompareText returns a value less than 0 if S1 < S2, a value greater than 0 if S1 > S2, and returns 0 if S1 = S2.

翻译为中文大概意思如下:
引用
用于比较基于当前语言环境不区分大小写的Unicode字符串。
单元
SysUtils中声明
分类
Unicode的例程
Delphi语法:
function WideCompareText(const S1, S2: WideString): Integer;
C + +语法:
extern PACKAGE int __fastcall WideCompareText(const WideString S1, const WideString S2);
说明
WideCompareText比较S1到S2,不区分大小写。比较操作是由当前语言环境的控制。 WideCompareText返回值小于0,如果S1<S2的值比0如果S1> S2,返回0,如果S1 = S2。

这里说的比较Unicode字符串大小,其大小顺序,应该就是指汉字的拼音顺序。
以前从未注意到这个函数,也是因为研究汉字取首拼时,才注意到该函数。
三界 2011-12-05
  • 打赏
  • 举报
回复
有空格和标点符号就不行了。
还需要改写优化
三界 2011-12-05
  • 打赏
  • 举报
回复
用密咒也是个方法!
gues1688 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 lhylhy 的回复:]

这个连二级汉字都没照顾到,自然管不了多音字了。
[/Quote]

试过了吗?试了再说嘛:

procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage(py('鎔勍'));
end;

一如当初 2011-12-05
  • 打赏
  • 举报
回复
楼主是好心人
yct0605 2011-12-05
  • 打赏
  • 举报
回复
楼主的分享精神还是可贵的啊,代码需要完善啊。
lhy 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 funxu 的回复:]
以前记得有一套用微软拼音和sql取汉字首字母的代码,只可惜没带在身上
[/Quote]
csdn下载频道能下。
lhy 2011-12-05
  • 打赏
  • 举报
回复
这个连二级汉字都没照顾到,自然管不了多音字了。
funxu 2011-12-05
  • 打赏
  • 举报
回复
以前记得有一套用微软拼音和sql取汉字首字母的代码,只可惜没带在身上
爱蹄子的羊头 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ccrun 的回复:]

如果遇到多音字呢。
[/Quote]


多音字就真的瞎了


我公司有两同事 一个姓 折(she) 一个姓 曾(zeng)

结果这两个人都不能用拼音头....


fengchuixuelai 2011-12-05
  • 打赏
  • 举报
回复
很好用,谢谢!
xinwen609 2011-12-04
  • 打赏
  • 举报
回复
同问。
[Quote=引用 1 楼 onlyou13 的回复:]
感谢分享,确实可以用。就是不知道分隔基准'八嚓哒妸发旮铪讥讥咔垃妈拿哦妑七然仨他哇哇哇夕丫匝咗'是怎么来的
[/Quote]
加载更多回复(6)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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