怎么获得汉字字符串拼音首字母??

解决方案 »

  1.   

    晕,谁说要2000-3000,26个就够了,GB2312是拼音序的,比如,比b的第一个大的,比c的第一个小的,首字母肯定就是b阿
      

  2.   

    -_-b,非使用unicode的情况下,
    char str[]="汗!狂汗!瀑布汗!"
    unsigned short gb=*(unsigned short*)str;
    变量gb便是汗的GB2312码。如果使用了繁体字,考虑扩展GBK码,可能要再建一个表。
      

  3.   

    我这里有段代码,给你参考下
    #include "stdio.h"
    #include "string.h"
    #define TBYTE unsigned charvoid FirstLetter(int nCode, char& strRet);
    void GetFirstLetter(char* strName, char* strFirstLetter)
    {
        TBYTE ucHigh, ucLow;
        int  nCode;
        char strRet;
    memset(strFirstLetter, 0, sizeof(strFirstLetter));
    int i;
    int len = 0;
        for (i=0; i < (int)strlen(strName); i++)
        {
            if ((TBYTE)strName[i] < 0x80)
                continue;        ucHigh = (TBYTE)strName[i];
            ucLow  = (TBYTE)strName[i+1];
            if ( ucHigh < 0xa1 || ucLow < 0xa1)
                continue;
            else
                // Treat code by section-position as an int type parameter,
                // so make following change to nCode.
                nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;        FirstLetter(nCode, strRet);
    strFirstLetter[len] = strRet;
            i++;
    len++;
        }
    strFirstLetter[len] = 0;
    }void FirstLetter(int nCode, char& strLetter)
    {
       if(nCode >= 1601 && nCode < 1637) strLetter = 'A';
       if(nCode >= 1637 && nCode < 1833) strLetter = 'B';
       if(nCode >= 1833 && nCode < 2078) strLetter = 'C';
       if(nCode >= 2078 && nCode < 2274) strLetter = 'D';
       if(nCode >= 2274 && nCode < 2302) strLetter = 'E';
       if(nCode >= 2302 && nCode < 2433) strLetter = 'F';
       if(nCode >= 2433 && nCode < 2594) strLetter = 'G';
       if(nCode >= 2594 && nCode < 2787) strLetter = 'H';
       if(nCode >= 2787 && nCode < 3106) strLetter = 'J';
       if(nCode >= 3106 && nCode < 3212) strLetter = 'K';
       if(nCode >= 3212 && nCode < 3472) strLetter = 'L';
       if(nCode >= 3472 && nCode < 3635) strLetter = 'M';
       if(nCode >= 3635 && nCode < 3722) strLetter = 'N';
       if(nCode >= 3722 && nCode < 3730) strLetter = 'O';
       if(nCode >= 3730 && nCode < 3858) strLetter = 'P';
       if(nCode >= 3858 && nCode < 4027) strLetter = 'Q';
       if(nCode >= 4027 && nCode < 4086) strLetter = 'R';
       if(nCode >= 4086 && nCode < 4390) strLetter = 'S';
       if(nCode >= 4390 && nCode < 4558) strLetter = 'T';
       if(nCode >= 4558 && nCode < 4684) strLetter = 'W';
       if(nCode >= 4684 && nCode < 4925) strLetter = 'X';
       if(nCode >= 4925 && nCode < 5249) strLetter = 'Y';
       if(nCode >= 5249 && nCode < 5590) strLetter = 'Z';
    }void main()
    {
    char strName[10], strRes[5];
        strcpy(strName, "汗!瀑布汗!");
    memset(strRes, 0, sizeof(strRes));
        GetFirstLetter(strName, strRes);
    printf("%s\n", strRes);
    }
      

  4.   

    haha 汗!瀑布汗!"  出来的结果是HHPBHH
      

  5.   

    不过还是没有搞懂为什么这么多汉字,就这几个ncode都包含了!!呵呵