VC/MFC 获取汉字拼音首字母(unicode编码)
来源:互联网 发布:读资治通鉴的女人 知乎 编辑:程序博客网 时间:2024/05/16 18:52
VC 获取汉字拼音首字母(unicode编码)上
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"; //将unicode编码转换成ANSI编码 int nSecondSecTable = strlen(ls_SecondSecTable); int stringlen = wcslen(strName); char *buffer = NULL; buffer = new char[stringlen * sizeof(TCHAR) + 1]; ZeroMemory(buffer, stringlen * sizeof(TCHAR) + 1); WideCharToMultiByte(CP_ACP, NULL, strName, stringlen, buffer, stringlen * sizeof(TCHAR) + 1, NULL, NULL); // std::string result; int nHigh, nLow, nCode; int i, j; for (i = 0; i < stringlen*sizeof(TCHAR); i++) { //找到汉字的机内码 nHigh = (UCHAR)(buffer[i + 0]); nLow = (UCHAR)(buffer[i + 1]); if (nHigh < 0xA1 || nLow < 0xA1) //非汉字保留 { result += buffer[i]; continue; } else { //一级汉字机内码与区位码的关系 //机内码高字节 = 区码 + 0XA0; //机内码低字节 = 位码 + 0XA0; //区位码 = (机内码高字节 - 0XA0) * 100 + 机内码低字节 - 0XA0; nCode = (nHigh - 0XA0) * 100 + nLow - 0XA0; } if (nCode > 1600 && nCode < 5590) //一级汉字 16-55区 { for (j = 22; j >= 0; j--) { if (nCode >= li_SecPosValue[j]) { result += lc_FirstLetter[j]; i++; break; } } continue; } else //二级汉字通过查表 56-87区;将二级汉字拼音的首字母放在ls_SecondSecTable表中 { i++; //根据机内码转换成ls_SecondSecTable表的下标 nCode = (nHigh - 0XA0 - 56) * 94 + nLow - 0XA0 - 1; if (nCode >= 0 && nCode < nSecondSecTable) result += ls_SecondSecTable[nCode]; else { result += (char)nHigh; result += (char)nLow; } } } //将ANSI编码转换成unicode编码 TCHAR *pwcsTemp = new TCHAR[stringlen + 1]; ZeroMemory(pwcsTemp, (stringlen + 1) * sizeof(TCHAR)); MultiByteToWideChar(CP_ACP, NULL, result.c_str(), result.length(), pwcsTemp, stringlen); CString str = pwcsTemp; // delete[]pwcsTemp; pwcsTemp = NULL; delete[]buffer; buffer = NULL; return str;}
0 0
- VC/MFC 获取汉字拼音首字母(unicode编码)
- VC/MFC 获取汉字拼音首字母(unicode编码)
- VC 获取汉字拼音首字母(unicode编码)上
- VC 获取汉字拼音首字母(unicode编码)下
- 获取汉字拼音首字母
- 获取汉字拼音首字母
- 获取汉字拼音首字母
- 获取汉字拼音首字母
- 获取汉字拼音首字母
- 获取汉字拼音首字母
- 获取汉字拼音首字母
- C++获取汉字拼音首字母(转)
- 在vc中实现获取汉字拼音的首字母
- 在vc中实现获取汉字拼音的首字母
- 在vc中实现获取汉字拼音的首字母
- 在vc中实现获取汉字拼音的首字母
- 在VC++中实现获取汉字拼音的首字母,转
- 在vc中实现获取汉字拼音的首字母
- qwed
- 第四次实验:树莓派下安装flume-1.6.0
- 折腾黑苹果 - 制作四叶草CLOVER引导U盘
- pads中元件为什么不能任意移动呢
- linux驱动中的总线理解
- VC/MFC 获取汉字拼音首字母(unicode编码)
- hihoCoder 1239 Fibonacci
- 接口与抽象类的终极区别
- unix环境高级编程读书笔记-线程同步属性
- C 大整数加法计算实现
- PHP之Smarty模板的基本使用
- 人工智能复习
- poj 2253 Frogger【Dijkstru&&floyd】
- Mac OS X 10.10 测试版无敌风火轮怎么办