汉字转拼音的c++实现
2016-11-13 16:09
288 查看
目的
在一个项目里,需要根据输入的一组汉字来自动生成这组汉字的拼音首字母字符串,搜了一下,很多实现方案,记录下。平台
Win10 64bit + VS15代码
void GetFirstLetter(CString sName, CString& sFirstLetter) { //高低字节 TCHAR cHigh = 0, cLow = 0; //内码 int nCode = 0; //每个字的拼音首字母 CString sLetter; sFirstLetter.Empty(); int nLen = sName.GetLength(); char* buffer = new char[nLen * sizeof(TCHAR) + 1]; ZeroMemory(buffer, nLen * sizeof(TCHAR) + 1); WideCharToMultiByte(CP_ACP, NULL, sName, nLen, buffer, nLen * sizeof(TCHAR) + 1, NULL, NULL); for (UINT i = 0; i<nLen * sizeof(TCHAR); i++) { if ((UCHAR)buffer[i] < 0x80) continue; cHigh = (UCHAR)buffer[i]; cLow = (UCHAR)buffer[i + 1]; if (cHigh < 0xa1 || cLow < 0xa1) continue; else nCode = (cHigh - 0xa0) * 100 + cLow - 0xa0; FirstLetter(nCode, sLetter); sFirstLetter += sLetter; i++; } delete []buffer; } void FirstLetter(int nCode, CString& sLetter) { if (nCode >= 1601 && nCode < 1637) sLetter = _T("A"); if (nCode >= 1637 && nCode < 1833) sLetter = _T("B"); if (nCode >= 1833 && nCode < 2078) sLetter = _T("C"); if (nCode >= 2078 && nCode < 2274) sLetter = _T("D"); if (nCode >= 2274 && nCode < 2302) sLetter = _T("E"); if (nCode >= 2302 && nCode < 2433) sLetter = _T("F"); if (nCode >= 2433 && nCode < 2594) sLetter = _T("G"); if (nCode >= 2594 && nCode < 2787) sLetter = _T("H"); if (nCode >= 2787 && nCode < 3106) sLetter = _T("J"); if (nCode >= 3106 && nCode < 3212) sLetter = _T("K"); if (nCode >= 3212 && nCode < 3472) sLetter = _T("L"); if (nCode >= 3472 && nCode < 3635) sLetter = _T("M"); if (nCode >= 3635 && nCode < 3722) sLetter = _T("N"); if (nCode >= 3722 && nCode < 3730) sLetter = _T("O"); if (nCode >= 3730 && nCode < 3858) sLetter = _T("P"); if (nCode >= 3858 && nCode < 4027) sLetter = _T("Q"); if (nCode >= 4027 && nCode < 4086) sLetter = _T("R"); if (nCode >= 4086 && nCode < 4390) sLetter = _T("S"); if (nCode >= 4390 && nCode < 4558) sLetter = _T("T"); if (nCode >= 4558 && nCode < 4684) sLetter = _T("W"); if (nCode >= 4684 && nCode < 4925) sLetter = _T("X"); if (nCode >= 4925 && nCode < 5249) sLetter = _T("Y"); if (nCode >= 5249 && nCode < 5590) sLetter = _T("Z"); }
使用
使用的时候只有调用GetFirstLetter()函数就可以了
相关文章推荐
- C++实现汉字转拼音
- 我的编程学习日志(15)--C/C++实现输出汉字拼音的首字母
- c++实现查找汉字拼音首字母
- c++实现查找汉字拼音首字母
- C++实现查找汉字拼音首字母
- 我的编程学习日志(15)--C/C++实现输出汉字拼音的首字母
- 输入汉字自动转为拼音(jsp实现方式)
- Java实现汉字转换为拼音
- VB实现 汉字转拼音缩写的函数
- 用ASP实现汉字转拼音的功能
- 一个比较齐全的汉字字库对应拼音 操作实现
- [转]php实现汉字转化为拼音
- C#实现将汉字与英文字符混和字符串中的汉字转换为拼音
- 用C#实现汉字转化为拼音(转载)
- C#实现汉字转化为拼音
- JAVA实现把汉字转化成拼音(转)
- 用C#实现汉字转化为拼音
- 实现汉字拼音码首字母的动态库
- Delphi中实现汉字拼音声母查询
- 使用HTML实现对汉字拼音的支持