请教高手,答对了可得100分

bictwxz 2000-08-29 10:16:00
希望能在软件中实现这样的功能:显示某一指定汉字的拼音的第一个字母, 如:当录入汉字“张”时,程序能自动显示“z” 。
...全文
190 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
U皮特U 2000-08-29
  • 打赏
  • 举报
回复
以下是一级简码汉字拼音对照表,第一个数字为区号减0xb0,第二个数字为位号减0xa1。每行表示一个拼音首字母在一级简码中的起始区号位号,一级简码是按拼单排序的。比如:“张”字的内码为0xd5, 0xc5,分别减去0xb0、0xa1后等于37,36,查下表可得出在z之后。再如:“王”字的内码为0xcd, 0xf5,分别减去0xb0、0xa1后等于29,84,查下表正好在w和x之间。
二级简码是按笔划排序的,只能通过逐个建立拼音对照表来查找,不过二级简级很少用。

00-00: a
00-36: b
02-32: c
04-78: d
06-73: e
07-01: f
08-32: g
09-93: h
i
11-86: j
15-05: k
16-11: l
18-71: m
20-34: n
21-21: o
21-29: p
22-57: q
24-26: r
24-85: s
27-90: t
u
v
29-57: w
30-83: x
33-24: y
36-48: z
// 以下生成全部汉字的VC程序,从产生出来的hz.txt中可以分析出上表

CFile f;
f.Open("c:\hz.txt", CFile::modeCreate | CFile::modeWrite);
char buff[1000];
for ( int i = 0 ; i < (0xff - 0xb0) ; i++ )
{
memset((void*)buff, 0, 1000);
int k = 0;
for ( ; ; )
{
if ( k >= 94 ) break;
int k1 = k;
for ( int j = 0 ; j <= 16 ; j++, k++ )
{
buff[j*2] = i+0xb0;
buff[j*2+1] = k + 0xa1;
}
CString strLine;
strLine.Format("%02d-%02d: %s\x0d\x0a", i, k1, buff);
f.Write((void*)LPCTSTR(strLine), strLine.GetLength());
}
}
f.Close();
bictwxz 2000-08-29
  • 打赏
  • 举报
回复
真对不起,有这么多人给我答案,我只好食言了。 给softsprite和friendkey 各50分吧。 谢谢所有给我答案的大侠。
friendkey 2000-08-29
  • 打赏
  • 举报
回复
使用这个函数就可以得到(输入汉字,返回字母)
function tform1.pingyin(const ch:string):char;
var quwei:integer;r:char;
begin
quwei:=(ord(ch[1])-176)*256+ord(ch[2])-161;
case quwei of
0..35:r:='a';
36..543:r:='b';
544..1101:r:='c';
1102..1608:r:='d';
1609..1792:r:='e';
1793..2079:r:='f';
2080..2396:r:='g';
2397..2901:r:='h';
2902..3844:r:='j';
3845..4106:r:='k';
4107..4678:r:='l';
4679..5153:r:='m';
5154..5396:r:='n';
5397..5404:r:='o';
5405..5688:r:='p';
5689..6169:r:='q';
6170..6228:r:='r';
6229..7001:r:='s';
7002..7480:r:='t';
7481..7762:r:='w';
7763..8471:r:='x';
8472..9263:r:='y';
else r:='z';
end;
result:=r;
end;
U皮特U 2000-08-29
  • 打赏
  • 举报
回复
GB汉字内码(一级简码)本身就是按拼音顺序排列的,按内码排序自然就是按拼音排序,windows系统并不需要先求得汉字的拼音才能按拼音顺序排序。
dandycheung 2000-08-29
  • 打赏
  • 举报
回复
对于这个问题,我想请人仔细的钻研一下。因为我注意到一件事情:在系统界面里(如控制面板),如果排列方式为自动排列,则以汉字为首的条目会以拼音顺序排列,可见 Windows 系统已经能够以某种方式实现根据汉字来得到其拼音。

5,388

社区成员

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

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