您的位置:首页 > 编程语言 > C语言/C++

汉字转拼音的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++