网上有很多这个贴子,但是不是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;
}
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;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货