如何取得中文字的第一个首拼字母?如"中国人"得到"zgr"

解决方案 »

  1.   

    已经测试过的代码unit PY;interfaceuses sysutils;// 获取汉字的拼音首字符,这个函数将用在GetPYIndexStr 中.function GetPYIndexChar(strChinese: string; bUpCase: Boolean = True): char;// 获取多个汉字的拼音首字符组成的字符串.function GetPYIndexStr(strChinese: string; bUpCase: Boolean = True): string;implementation////////////////////////////////////////////////////////////////////////////// 函数: GetPYIndexChar(strChinese: string;bUpCase: Boolean = True): char;//// 函数功能:获取汉字的拼音首字符.// 例: GetPYIndexChar('程') 将返回'C'.//// 注意:对于多于一个汉字的输入(string类型)只有第一个有效,但不会产生错误// 例如,GetPYIndexChar('程序')也将返回'C'.//// 第二个参数决定返回大写还是小写 , 缺省为大写 .////////////////////////////////////////////////////////////////////////////function GetPYIndexChar(strChinese: string;bUpCase: Boolean = True): char;begin// 根据汉字表中拼音首字符分别为“A”至“Z”的汉字内码范围,// 要检索的汉字只需要检查它的内码位于哪一个首字符的范围内,// 就可以判断出它的拼音首字符。case WORD(strChinese[1]) shl 8 + WORD(strChinese[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';elseresult := char(0);end;if not bUpCase thenbegin // 转换为小写result := Chr(Ord(result)+32);end;end;////////////////////////////////////////////////////////////////////////////// 函数: GetPYIndexStr(strChinese: string;bUpCase: Boolean = True): string;//// 函数功能:获取多个汉字的拼音首字符组成的字符串.// 例: GetPYIndexStr('程') 将返回'C'.// GetPYIndexStr('程序')将返回'CX'.//// 第二个参数决定返回大写还是小写 , 缺省为大写 .////////////////////////////////////////////////////////////////////////////function GetPYIndexStr(strChinese: string;bUpCase: Boolean = True): string;varstrChineseTemp : string;cTemp : Char;beginresult := '';strChineseTemp := strChinese;while strChineseTemp<>'' dobegincTemp := GetPYIndexChar(strChineseTemp);if not bUpCase thenbegin // 转换为小写cTemp := Chr(Ord(cTemp)+32);end;result := result + string(cTemp);strChineseTemp := Copy(strChineseTemp,3,Length(strChineseTemp));end;end;end.
      

  2.   

    函数如下:function GetPYIndexString( ChString:string):string;
    var
     i:integer;
    begin  //根据一个汉字字符串取得拼音字头,不对汉字字符串做校验
     if ChString = '' then
       result:='';
     for i:=1 to length(ChString) do
       if (i mod 2) = 1 then
         case WORD(ChString[i]) shl 8 + WORD(ChString[i+1]) of
           $B0A1..$B0C4 : result := result+'A';
           $B0C5..$B2C0 : result := result+'B';
           $B2C1..$B4ED : result := result+'C';
           $B4EE..$B6E9 : result := result+'D';
           $B6EA..$B7A1 : result := result+'E';
           $B7A2..$B8C0 : result := result+'F';
           $B8C1..$B9FD : result := result+'G';
           $B9FE..$BBF6 : result := result+'H';
           $BBF7..$BFA5 : result := result+'J';
           $BFA6..$C0AB : result := result+'K';
           $C0AC..$C2E7 : result := result+'L';
           $C2E8..$C4C2 : result := result+'M';
           $C4C3..$C5B5 : result := result+'N';
           $C5B6..$C5BD : result := result+'O';
           $C5BE..$C6D9 : result := result+'P';
           $C6DA..$C8BA : result := result+'Q';
           $C8BB..$C8F5 : result := result+'R';
           $C8F6..$CBF9 : result := result+'S';
           $CBFA..$CDD9 : result := result+'T';
           $CDDA..$CEF3 : result := result+'W';
           $CEF4..$D188 : result := result+'X';
           $D1B9..$D4D0 : result := result+'Y';
           $D4D1..$D7F9 : result := result+'Z';
         end;
    end;