汉字的拼音首字母[支持Unicode]

来源:互联网 发布:java 超时异常 编辑:程序博客网 时间:2024/05/17 04:59
  1. void GetFirstLetter(CString strName, CString& strFirstLetter)
  2. {
  3.     BYTE ucHigh, ucLow;
  4.     int nCode;
  5.     CString strRet;
  6.     strFirstLetter.Empty();
  7. //
  8. #ifdef _UNICODE
  9.     DWORD dwNum = WideCharToMultiByte(CP_OEMCP, NULL, strName, -1, NULL, 0, NULL, FALSE);
  10.     char *psText = new char[dwNum];
  11.     WideCharToMultiByte(CP_OEMCP, NULL, strName, -1, psText, dwNum, NULL, FALSE);
  12. #else
  13.     CString psText = strName;
  14.     UINT dwNum = strName.GetLength();
  15. #endif
  16.     for (UINT i=0; i<dwNum; i++)
  17.     {
  18.         if ( (BYTE)psText[i] < 0x80 )
  19.             continue;
  20.         ucHigh = (BYTE)psText[i];
  21.         ucLow = (BYTE)psText[i+1];
  22.         if ( ucHigh < 0xa1 || ucLow < 0xa1)
  23.             continue;
  24.         else
  25.             nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;
  26.         FirstLetter(nCode, strRet);
  27.         strFirstLetter += strRet;
  28.         i++;
  29.     }
  30. }
  31. void FirstLetter(int nCode, CString& strLetter)
  32. {
  33.     if(nCode >= 1601 && nCode < 1637) strLetter = _T("A");
  34.     if(nCode >= 1637 && nCode < 1833) strLetter = _T("B");
  35.     if(nCode >= 1833 && nCode < 2078) strLetter = _T("C");
  36.     if(nCode >= 2078 && nCode < 2274) strLetter = _T("D");
  37.     if(nCode >= 2274 && nCode < 2302) strLetter = _T("E");
  38.     if(nCode >= 2302 && nCode < 2433) strLetter = _T("F");
  39.     if(nCode >= 2433 && nCode < 2594) strLetter = _T("G");
  40.     if(nCode >= 2594 && nCode < 2787) strLetter = _T("H");
  41.     if(nCode >= 2787 && nCode < 3106) strLetter = _T("J");
  42.     if(nCode >= 3106 && nCode < 3212) strLetter = _T("K");
  43.     if(nCode >= 3212 && nCode < 3472) strLetter = _T("L");
  44.     if(nCode >= 3472 && nCode < 3635) strLetter = _T("M");
  45.     if(nCode >= 3635 && nCode < 3722) strLetter = _T("N");
  46.     if(nCode >= 3722 && nCode < 3730) strLetter = _T("O");
  47.     if(nCode >= 3730 && nCode < 3858) strLetter = _T("P");
  48.     if(nCode >= 3858 && nCode < 4027) strLetter = _T("Q");
  49.     if(nCode >= 4027 && nCode < 4086) strLetter = _T("R");
  50.     if(nCode >= 4086 && nCode < 4390) strLetter = _T("S");
  51.     if(nCode >= 4390 && nCode < 4558) strLetter = _T("T");
  52.     if(nCode >= 4558 && nCode < 4684) strLetter = _T("W");
  53.     if(nCode >= 4684 && nCode < 4925) strLetter = _T("X");
  54.     if(nCode >= 4925 && nCode < 5249) strLetter = _T("Y");
  55.     if(nCode >= 5249 && nCode < 5590) strLetter = _T("Z");
  56. }
原创粉丝点击