【求助】关于取一段汉子首字母的编译

求助者TNT 2018-08-15 12:08:51
我使用下面这段代码获取汉子的首字母,但是每次返回的都是只有第一个汉子的首字母,如果中间加入字母的话,字母会获取2次,不知道代码哪里错了,希望大神们帮小弟个忙,万分感谢~~
function HZtoPY(HZStr:Widestring):String;
var b: Integer;
u, c: AnsiString;
begin
Result:='';
for b:=1 To Length(HZStr) do
begin
u:=HZStr[B];
if ByteType(u,1)=mbSingleByte then c:=u
else
case WORD(u[1]) shl 8 + Word(u[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:='I';
$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..$D1B8:Result:='X'; $D1B9..$D4D0:Result:='Y';
$D4D1..$D7F9:Result:='Z';
else
c:=u;
end;
Result:=Result;
end;
end;
...全文
110 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shw014 2018-08-15
  • 打赏
  • 举报
回复
    Result:='';
for b:=1 To Length(HZStr) do
begin
u:=HZStr[B];
if ByteType(u,1)=mbSingleByte then c:=u
else
case WORD(u[1]) shl 8 + Word(u[2]) of
$B0A1..$B0C4:c:='A'; $B0C5..$B2C0:c:='B';
$B2C1..$B4ED:c:='C'; $B4EE..$B6E9:c:='D';
$B6EA..$B7A1:c:='E'; $B7A2..$B8C0:c:='F';
$B8C1..$B9FD:c:='G'; $B9FE..$BBF6:c:='I';
$BBF7..$BFA5:c:='J'; $BFA6..$C0AB:c:='K';
$C0AC..$C2E7:c:='L'; $C2E8..$C4C2:c:='M';
$C4C3..$C5B5:c:='N'; $C5B6..$C5BD:c:='O';
$C5BE..$C6D9:c:='P'; $C6DA..$C8BA:c:='Q';
$C8BB..$C8F5:c:='R'; $C8F6..$CBF9:c:='S';
$CBFA..$CDD9:c:='T'; $CDDA..$CEF3:c:='W';
$CEF4..$D1B8:c:='X'; $D1B9..$D4D0:c:='Y';
$D4D1..$D7F9:c:='Z';
else
c:=u;
end;
Result:=Result+c;
end;
求助者TNT 2018-08-15
  • 打赏
  • 举报
回复
谢谢大家,找到了另外一种方法。
求助者TNT 2018-08-15
  • 打赏
  • 举报
回复
function HZtoPY(HZStr:Widestring):String;
var b: Integer;
u, c: AnsiString;
begin
Result:='';
for b:=1 To Length(HZStr) do
begin
u:=HZStr[B];
if ByteType(u,1)=mbSingleByte then c:=u
else
case WORD(u[1]) shl 8 + Word(u[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:='I';
$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
c:=u;
end;
Result:=Result+c;
ShowMessage(Result);
end;
end;
改成这样后加了个控件显示拼音,结果显示的是最后一个拼音加字母,前面的都丢失了
procedure TForm_CS.Button5Click(Sender: TObject);
begin
Edit_MC.Text:=HZtoPY(Edit_DM.Text);
end;
lyhoo163 2018-08-15
  • 打赏
  • 举报
回复
Result:=Result+c; 这样,才能累加拼音字母。

16,748

社区成员

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

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