网上有很多这个贴子,但是不是VC的,笔者综合了其他帖子的内容,将之改成了VC的函数,只要将汉字字符串作为参数传递给函数就会返回字符串的首字母。本函数直接复制即可使用。希望能给你带来方便。笔者也花了不少时间来整理。
CString CDDlg::GetPY(CString str)
{
  int   i;   
  int   len;   
  int   value;   
  BOOL   left;   
  char   input[64];   
  char   buf[16];   
  CString Output,strOut,strtemp;
//  int areacode[] = {45217,45253,45761,46318,46826,47010,47297,47614,48119,48119,49062,49324,49896,50371,50614,50622,50906,51387,51446,52218,52698,52698,52698,52980,53689,54481};
  int areacode[] = { 1601,1637, 1833, 2078, 2274 , 2302,2433,2594,2787,2787,3106,3212,3472,3635,3723,3730, 3858,4027,4086,4390,4558,4558,4558,4684,4925,5249,5590}  ;
 //                      A     B     C      D    E     F    G    H    I    J    K    L    M    N    O     P    Q    R     S    T    U    V   W    X    Y    Z
/*  ((1601, A  1636),   (1637, B  1832),   (1833, C 2077),   
          (2078,  D 2273),   (2274,  E 2301),   (2302,F   2432),   (2433, G  2593),   (2594,H   2786),   (9999,  I 0000),   
          (2787, J  3105),   (3106,  K 3211),   (3212, L  3471),   (3472,  M 3634),   (3635,  N 3722),   (3723, O  3729),   
          (3730, P  3857),   (3858, Q  4026),   (4027, R  4085),   (4086,  S 4389),   (4390, T  4557),   (9999, U  0000),   
          (9999,  V 0000),   (4558, W  4683),   (4684,  X 4924),   (4925,  Y 5248),   (5249,  Z 5589));   
*/
  char PY[]={'A','B','C','D','E','F','G','H','J','J','K','L','M','N','O','P','Q','R','S','T','W','W','W','X','Y','Z'};  sprintf(input,   "%s",   str);   
  len   =   strlen(input);   
  left   =   TRUE; 
  int code;  for(i=0;i<len;i++)   
  {   
  value   =   (input[i]+256)%256;   
  if(value   >=   160)   
  {   
  value   -=160;   
  sprintf(buf,   "%02d",   value);   
  Output   +=   buf;   
  if(!left)   
  {
  Output   +='\0';   
  code=atoi(Output);
  for(int i=0;i<26;i++)
  {
  int max = 55290;
  if(i != 25) max = areacode[i+1];
  if(areacode[i]<=code && code<max)
  strOut+=PY[i];
  }
  Output.Empty ();
  }
  left   =   !left;   
  }   
  else   
  {   
  sprintf(buf,   "%02d",   value);   
  Output   +=   buf;   
  Output   +=   '\0';   
  code=atoi(Output);
  for(int i=0;i<26;i++)
  {
  int max = 55290;
  if(i != 25) max = areacode[i+1];
  if(areacode[i]<=code && code<max)
  strOut+=PY[i];
  }
  Output.Empty ();   }   
  }
 
 return strOut;
}