请问如何获得汉字拼音首码?如:阿- a    郑-- z  程序员-- cxy 等

解决方案 »

  1.   

    /////////////////////////////////////////////////////////////////////////////
    // FileName: PY.pas
    // 
    // Copyright (C) 1999 By Zhang Qing
    //
    // You can use and modify it ,but please send me an email.
    //
    // E-Mail: [email protected]
    /////////////////////////////////////////////////////////////////////////////
    unit PY;interface
    uses 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';
        else
                   result := char(0);
      end;
      if not bUpCase then
      begin // 转换为小写
        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;
    var
      strChineseTemp : string;
      cTemp : Char;
    begin
      result := '';
      strChineseTemp := strChinese;
      while strChineseTemp<>'' do
      begin
        cTemp := GetPYIndexChar(strChineseTemp);
        if not bUpCase then
        begin // 转换为小写
          cTemp := Chr(Ord(cTemp)+32);
        end;
        result := result + string(cTemp);
        strChineseTemp := Copy(strChineseTemp,3,Length(strChineseTemp));
      end;
    end;end.
      

  2.   

    一级汉字如楼上 xzhifei 的方法,二级汉字用查表法,自己建个表就可以了
      

  3.   

    /*--获得汉字字符串的首字母--*/
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fGetPy]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[fGetPy]
    GO--创建取拼音函数
    create function fGetPy(@Str varchar(500)='')
    returns varchar(500)
    as
    begin
    declare @strlen int,@return varchar(500),@ii int
    declare @n int,@c char(1),@chn nchar(1)select @strlen=len(@str),@return='',@ii=0
    set @ii=0
    while @ii<@strlen
    begin
    select @ii=@ii+1,@n=63,@chn=substring(@str,@ii,1)
    if @chn>'z'
    select @n = @n +1
    ,@c = case chn when @chn then char(@n) else @c end
    from(
    select top 27 * from (
    select chn = '吖'
    union all select '八'
    union all select '嚓'
    union all select '咑'
    union all select '妸'
    union all select '发'
    union all select '旮'
    union all select '铪'
    union all select '丌' --because have no 'i'
    union all select '丌'
    union all select '咔'
    union all select '垃'
    union all select '嘸'
    union all select '拏'
    union all select '噢'
    union all select '妑'
    union all select '七'
    union all select '呥'
    union all select '仨'
    union all select '他'
    union all select '屲' --no 'u'
    union all select '屲' --no 'v'
    union all select '屲'
    union all select '夕'
    union all select '丫'
    union all select '帀'
    union all select @chn) as a
    order by chn COLLATE Chinese_PRC_CI_AS 
    ) as b
    else set @c='a'
    set @return=@return+@c
    end
    return(@return)
    endgo
    --测试
    select dbo.fgetpy('魏保光') as 姓名拼音,dbo.fgetpy('ab中c国人') as 中国人
    select dbo.fgetpy('刘子良') as 姓名拼音,dbo.fgetpy('ab中c国人') as 中国人
    select dbo.fgetpy('吴过') as 姓名拼音,dbo.fgetpy('ab中c国人') as 中国人
    select dbo.fgetpy('东北') as 姓名拼音,dbo.fgetpy('ab中c国人') as 中国人--删除拼音函数
    drop function fgetpy
      

  4.   

    http://tansuo.51.net上有个DLL可以,直接调用就可得到