#ifndef __HZ2PY_H_
#define __HZ2PY_H_
/****************************************************************************
汉字转拼音首字母大写 转自 http://www.cnblogs.com/carekee/articles/1721372.html
****************************************************************************/
static
CString GetFirstLetter(LPCTSTR strName)
{
static int li_SecPosValue[] = {
1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212,
3472, 3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249
};
static char* lc_FirstLetter[] = {
"A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T", "W", "X", "Y", "Z"
};
static char* ls_SecondSecTable =
"CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZLSGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCSCJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHY"
"LYGXFPTYJYYZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBNPTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWY"
"WSBHTRXXGLHQHFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLYZHSXLZCGHPXZHZNYTDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCDHJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMY"
"DJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHSY[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBSQKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ[QSCFYMNDMGBWHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZP"
"MGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ[YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJB"
"PMLMSXLZJQQHZYJCZYDJWBMYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTX"
"YXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWGJJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJAFYZDJCNMWESCYGLBTZCGMSSLLYXQSXSBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMZYHYWDBXBTLMSYYYFSXJC[DXXLHJHF[SXZQHFZMZCZTQCXZXRTTDJHNNYZQQMNQDMMG[YDXMJGDHCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGS"
"QQDDJCMBKZFFXMKDMDSYYSZCMLJDSYNSBRSKMKMPCKLGDBQTFZSWTFGGLYPLLJZHGJ[GYPZLTCSMCNBTJBQFKTHBYZGKPBBYMTDSSXTBNPDKLEYCJNYDDYKZDDHQHSDZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBBTMLYZXDCJPLDLPCQDHZYCBZSCZBZMSLJFLKRZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLG[DJLSLYGKDZPZXJ"
"YYZLWCXSZFGWYYDLYHCLJSCMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJY[CNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPPXJCJLZCSHLTOLJNMDDDLNGKAQHQHJGYKHEZNMSHRP[QQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMMMYXCTPSHCPTXXZZSMPHPSHMCLMLDQFYQXSZYYDYJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZK"
"HHGFLBCSMDLDGDZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYGCTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPHJSGZGSZZQLYLWTJPFSYASMCJBTZKYCWMYTCSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQ"
"FHBSAQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ";
CString result;
int H, L, W;
UINT i, stringlen = _tcslen(strName);
int j;
for (i = 0; i < stringlen; i++) {
H = (UCHAR) (strName[i + 0]);
L = (UCHAR) (strName[i + 1]);
if (H < 0xA1 || L < 0xA1) {
result += strName[i];
continue;
} else {
W = (H - 160) * 100 + L - 160;
}
if (W > 1600 && W < 5590) {
for (j = 22; j >= 0; j--) {
if (W >= li_SecPosValue[j]) {
result += lc_FirstLetter[j];
i ++;
break;
}
}
continue;
} else {
i++;
W = (H - 160 - 56) * 94 + L - 161;
if (W >= 0 && W <= 3007)
result += ls_SecondSecTable[W];
else {
result += (char) H;
result += (char) L;
}
}
}
return result;
}
/****************************************************************************
汉字转拼音全拼
如果每个汉字的全拼之间不需要空格,请将下面的
“strRet += " "; // 添加一个空格” 去掉
****************************************************************************/
typedef struct _tPYTABLE
{
int iIndex;//索引值
char* pszPY;//拼音值
} PYTABLE;
static PYTABLE m_pyTable[] =
{
{-20319,"a"},
{-20317,"ai"},
{-20304,"an"},
{-20295,"ang"},
{-20292,"ao"},
{-20283,"ba"},
{-20265,"bai"},
{-20257,"ban"},
{-20242,"bang"},
{-20230,"bao"},
{-20051,"bei"},
{-20036,"ben"},
{-20032,"beng"},
{-20026,"bi"},
{-20002,"bian"},
{-19990,"biao"},
{-19986,"bie"},
{-19982,"bin"},
{-19976,"bing"},
{-19805,"bo"},
{-19784,"bu"},
{-19775,"ca"},
{-19774,"cai"},
{-19763,"can"},
{-19756,"cang"},
{-19751,"cao"},
{-19746,"ce"},
{-19741,"ceng"},
{-19739,"cha"},
{-19728,"chai"},
{-19725,"chan"},
{-19715,"chang"},
{-19540,"chao"},
{-19531,"che"},
{-19525,"chen"},
{-19515,"cheng"},
{-19500,"chi"},
{-19484,"chong"},
{-19479,"chou"},
{-19467,"chu"},
{-19289,"chuai"},
{-19288,"chuan"},
{-19281,"chuang"},
{-19275,"chui"},
{-19270,"chun"},
{-19263,"chuo"},
{-19261,"ci"},
{-19249,"cong"},
{-19243,"cou"},
{-19242,"cu"},
{-19238,"cuan"},
{-19235,"cui"},
{-19227,"cun"},
{-19224,"cuo"},
{-19218,"da"},
{-19212,"dai"},
{-19038,"dan"},
{-19023,"dang"},
{-19018,"dao"},
{-19006,"de"},
{-19003,"deng"},
{-18996,"di"},
{-18977,"dian"},
{-18961,"diao"},
{-18952,"die"},
{-18783,"ding"},
{-18774,"diu"},
{-18773,"dong"},
{-18763,"dou"},
{-18756,"du"},
{-18741,"duan"},
{-18735,"dui"},
{-18731,"dun"},
{-18722,"duo"},
{-18710,"e"},
{-18697,"en"},
{-18696,"er"},
{-18526,"fa"},
{-18518,"fan"},
{-18501,"fang"},
{-18490,"fei"},
{-18478,"fen"},
{-18463,"feng"},
{-18448,"fo"},
{-18447,"fou"},
{-18446,"fu"},
{-18239,"ga"},
{-18237,"gai"},
{-18231,"gan"},
{-18220,"gang"},
{-18211,"gao"},
{-18201,"ge"},
{-18184,"gei"},
{-18183,"gen"},
{-18181,"geng"},
{-18012,"gong"},
{-17997,"gou"},
{-17988,"gu"},
{-17970,"gua"},
{-17964,"guai"},
{-17961,"guan"},
{-17950,"guang"},
{-17947,"gui"},
{-17931,"gun"},
{-17928,"guo"},
{-17922,"ha"},
{-17759,"hai"},
{-17752,"han"},
{-17733,"hang"},
{-17730,"hao"},
{-17721,"he"},
{-17703,"hei"},
{-17701,"hen"},
{-17697,"heng"},
{-17692,"hong"},
{-17683,"hou"},
{-17676,"hu"},
{-17496,"hua"},
{-17487,"huai"},
{-17482,"huan"},
{-17468,"huang"},
{-17454,"hui"},
{-17433,"hun"},
{-17427,"huo"},
{-17417,"ji"},
{-17202,"jia"},
{-17185,"jian"},
{-16983,"jiang"},
{-16970,"jiao"},
{-16942,"jie"},
{-16915,"jin"},
{-16733,"jing"},
{-16708,"jiong"},
{-16706,"jiu"},
{-16689,"ju"},
{-16664,"juan"},
{-16657,"jue"},
{-16647,"jun"},
{-16474,"ka"},
{-16470,"kai"},
{-16465,"kan"},
{-16459,"kang"},
{-16452,"kao"},
{-16448,"ke"},
{-16433,"ken"},
{-16429,"keng"},
{-16427,"kong"},
{-16423,"kou"},
{-16419,"ku"},
{-16412,"kua"},
{-16407,"kuai"},
{-16403,"kuan"},
{-16401,"kuang"},
{-16393,"kui"},
{-16220,"kun"},
{-16216,"kuo"},
{-16212,"la"},
{-16205,"lai"},
{-16202,"lan"},
{-16187,"lang"},
{-16180,"lao"},
{-16171,"le"},
{-16169,"lei"},
{-16158,"leng"},
{-16155,"li"},
{-15959,"lia"},
{-15958,"lian"},
{-15944,"liang"},
{-15933,"liao"},
{-15920,"lie"},
{-15915,"lin"},
{-15903,"ling"},
{-15889,"liu"},
{-15878,"long"},
{-15707,"lou"},
{-15701,"lu"},
{-15681,"lv"},
{-15667,"luan"},
{-15661,"lue"},
{-15659,"lun"},
{-15652,"luo"},
{-15640,"ma"},
{-15631,"mai"},
{-15625,"man"},
{-15454,"mang"},
{-15448,"mao"},
{-15436,"me"},
{-15435,"mei"},
{-15419,"men"},
{-15416,"meng"},
{-15408,"mi"},
{-15394,"mian"},
{-15385,"miao"},
{-15377,"mie"},
{-15375,"min"},
{-15369,"ming"},
{-15363,"miu"},
{-15362,"mo"},
{-15183,"mou"},
{-15180,"mu"},
{-15165,"na"},
{-15158,"nai"},
{-15153,"nan"},
{-15150,"nang"},
{-15149,"nao"},
{-15144,"ne"},
{-15143,"nei"},
{-15141,"nen"},
{-15140,"neng"},
{-15139,"ni"},
{-15128,"nian"},
{-15121,"niang"},
{-15119,"niao"},
{-15117,"nie"},
{-15110,"nin"},
{-15109,"ning"},
{-14941,"niu"},
{-14937,"nong"},
{-14933,"nu"},
{-14930,"nv"},
{-14929,"nuan"},
{-14928,"nue"},
{-14926,"nuo"},
{-14922,"o"},
{-14921,"ou"},
{-14914,"pa"},
{-14908,"pai"},
{-14902,"pan"},
{-14894,"pang"},
{-14889,"pao"},
{-14882,"pei"},
{-14873,"pen"},
{-14871,"peng"},
{-14857,"pi"},
{-14678,"pian"},
{-14674,"piao"},
{-14670,"pie"},
{-14668,"pin"},
{-14663,"ping"},
{-14654,"po"},
{-14645,"pu"},
{-14630,"qi"},
{-14594,"qia"},
{-14429,"qian"},
{-14407,"qiang"},
{-14399,"qiao"},
{-14384,"qie"},
{-14379,"qin"},
{-14368,"qing"},
{-14355,"qiong"},
{-14353,"qiu"},
{-14345,"qu"},
{-14170,"quan"},
{-14159,"que"},
{-14151,"qun"},
{-14149,"ran"},
{-14145,"rang"},
{-14140,"rao"},
{-14137,"re"},
{-14135,"ren"},
{-14125,"reng"},
{-14123,"ri"},
{-14122,"rong"},
{-14112,"rou"},
{-14109,"ru"},
{-14099,"ruan"},
{-14097,"rui"},
{-14094,"run"},
{-14092,"ruo"},
{-14090,"sa"},
{-14087,"sai"},
{-14083,"san"},
{-13917,"sang"},
{-13914,"sao"},
{-13910,"se"},
{-13907,"sen"},
{-13906,"seng"},
{-13905,"sha"},
{-13896,"shai"},
{-13894,"shan"},
{-13878,"shang"},
{-13870,"shao"},
{-13859,"she"},
{-13847,"shen"},
{-13831,"sheng"},
{-13658,"shi"},
{-13611,"shou"},
{-13601,"shu"},
{-13406,"shua"},
{-13404,"shuai"},
{-13400,"shuan"},
{-13398,"shuang"},
{-13395,"shui"},
{-13391,"shun"},
{-13387,"shuo"},
{-13383,"si"},
{-13367,"song"},
{-13359,"sou"},
{-13356,"su"},
{-13343,"suan"},
{-13340,"sui"},
{-13329,"sun"},
{-13326,"suo"},
{-13318,"ta"},
{-13147,"tai"},
{-13138,"tan"},
{-13120,"tang"},
{-13107,"tao"},
{-13096,"te"},
{-13095,"teng"},
{-13091,"ti"},
{-13076,"tian"},
{-13068,"tiao"},
{-13063,"tie"},
{-13060,"ting"},
{-12888,"tong"},
{-12875,"tou"},
{-12871,"tu"},
{-12860,"tuan"},
{-12858,"tui"},
{-12852,"tun"},
{-12849,"tuo"},
{-12838,"wa"},
{-12831,"wai"},
{-12829,"wan"},
{-12812,"wang"},
{-12802,"wei"},
{-12607,"wen"},
{-12597,"weng"},
{-12594,"wo"},
{-12585,"wu"},
{-12556,"xi"},
{-12359,"xia"},
{-12346,"xian"},
{-12320,"xiang"},
{-12300,"xiao"},
{-12120,"xie"},
{-12099,"xin"},
{-12089,"xing"},
{-12074,"xiong"},
{-12067,"xiu"},
{-12058,"xu"},
{-12039,"xuan"},
{-11867,"xue"},
{-11861,"xun"},
{-11847,"ya"},
{-11831,"yan"},
{-11798,"yang"},
{-11781,"yao"},
{-11604,"ye"},
{-11589,"yi"},
{-11536,"yin"},
{-11358,"ying"},
{-11340,"yo"},
{-11339,"yong"},
{-11324,"you"},
{-11303,"yu"},
{-11097,"yuan"},
{-11077,"yue"},
{-11067,"yun"},
{-11055,"za"},
{-11052,"zai"},
{-11045,"zan"},
{-11041,"zang"},
{-11038,"zao"},
{-11024,"ze"},
{-11020,"zei"},
{-11019,"zen"},
{-11018,"zeng"},
{-11014,"zha"},
{-10838,"zhai"},
{-10832,"zhan"},
{-10815,"zhang"},
{-10800,"zhao"},
{-10790,"zhe"},
{-10780,"zhen"},
{-10764,"zheng"},
{-10587,"zhi"},
{-10544,"zhong"},
{-10533,"zhou"},
{-10519,"zhu"},
{-10331,"zhua"},
{-10329,"zhuai"},
{-10328,"zhuan"},
{-10322,"zhuang"},
{-10315,"zhui"},
{-10309,"zhun"},
{-10307,"zhuo"},
{-10296,"zi"},
{-10281,"zong"},
{-10274,"zou"},
{-10270,"zu"},
{-10262,"zuan"},
{-10260,"zui"},
{-10256,"zun"},
{-10254,"zuo"},
{-10247,"zz"}
};
static CString GetPYbyChar(int chr)
{
CString strRet = "";
// 检查是否为ASCII字符
if (chr>0 && chr<160)
{
strRet.Format("%c", chr);
return strRet;
}
// 无效字符(不在拼音数据范围)
if (chr<-20319 || chr>-10247)
{
strRet = "";
return strRet;
}
// 根据索引表查找拼音(遍历算法-较慢)
size_t tmpLength = sizeof(m_pyTable)/sizeof(PYTABLE);
for(size_t iLoop=tmpLength-1; iLoop>=0; iLoop--)
{
if (m_pyTable[iLoop].iIndex <= chr)
{
strRet = m_pyTable[iLoop].pszPY;
break;
}
}
return strRet;
}
static CString GetPYfromStr(LPCSTR str)
{
int iValue;
BYTE nFirst = 0;
BYTE nSecond = 0;
CString strRet = "";
for(size_t iLoop=0; iLoop<strlen(str); iLoop++)
{
nFirst = str[iLoop];
if (nFirst>160)
{
iLoop++;
nSecond = str[iLoop];
// 赋值索引
iValue = nFirst*256 + nSecond - 65536;
}
else
{
// 赋值索引(ASCII字符)
iValue = nFirst;
}
// 取得PY
strRet += GetPYbyChar(iValue);
strRet += " "; // 添加一个空格
}
return strRet;
}
#endif __HZ2PY_H_
|