VC实现汉字转拼音缩写程序

实现原理跟汉字转拼音一样,都是根据区位码来判断

功能子程序如下:

//通过汉字获得汉字拼音首字母串void CCHCharSpellDlg::GetFirstLetter(CString strName, CString& strFirstLetter){ //存放一个汉字高低位字节 TBYTE ucHigh, ucLow; //存放汉字区位码 int nCode; //存放汉字拼音首字母 CString strRet; //复位首字母 strFirstLetter.Empty(); //单个字节遍历 for (int i=0; i<strName.GetLength(); i++) { //判断是否是组成汉字的字节 if ( (TBYTE)strName[i] < 0x80 ) { continue; } //获取汉字高位字节 ucHigh = (TBYTE)strName[i]; //获取汉字低位字节 ucLow = (TBYTE)strName[i+1]; //汉字的内码是从0xa1开始编码 if ( ucHigh < 0xa1 || ucLow < 0xa1) { continue; } else { //计算汉字区位码 nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0; //通过汉字区位码获得汉字拼音首字母 FirstLetter(nCode, strRet); //将首字母拼接成串 strFirstLetter += strRet; i++; } }}//通过汉字区位码获得汉字拼音首字母,这40个区的汉字是按拼音首字母排序void CCHCharSpellDlg::FirstLetter(int nCode, CString& strLetter){ if(nCode >= 1601 && nCode < 1637) strLetter = _T("a"); if(nCode >= 1637 && nCode < 1833) strLetter = _T("b"); if(nCode >= 1833 && nCode < 2078) strLetter = _T("c"); if(nCode >= 2078 && nCode < 2274) strLetter = _T("d"); if(nCode >= 2274 && nCode < 2302) strLetter = _T("e"); if(nCode >= 2302 && nCode < 2433) strLetter = _T("f"); if(nCode >= 2433 && nCode < 2594) strLetter = _T("g"); if(nCode >= 2594 && nCode < 2787) strLetter = _T("h"); if(nCode >= 2787 && nCode < 3106) strLetter = _T("j"); if(nCode >= 3106 && nCode < 3212) strLetter = _T("k"); if(nCode >= 3212 && nCode < 3472) strLetter = _T("l"); if(nCode >= 3472 && nCode < 3635) strLetter = _T("m"); if(nCode >= 3635 && nCode < 3722) strLetter = _T("n"); if(nCode >= 3722 && nCode < 3730) strLetter = _T("o"); if(nCode >= 3730 && nCode < 3858) strLetter = _T("p"); if(nCode >= 3858 && nCode < 4027) strLetter = _T("q"); if(nCode >= 4027 && nCode < 4086) strLetter = _T("r"); if(nCode >= 4086 && nCode < 4390) strLetter = _T("s"); if(nCode >= 4390 && nCode < 4558) strLetter = _T("t"); if(nCode >= 4558 && nCode < 4684) strLetter = _T("w"); if(nCode >= 4684 && nCode < 4925) strLetter = _T("x"); if(nCode >= 4925 && nCode < 5249) strLetter = _T("y"); if(nCode >= 5249 && nCode < 5590) strLetter = _T("z");}

调用程序如下:

void CCHCharSpellDlg::OnBtnchange() { // TODO: Add your control notification handler code here CString CHChar,SpellChar; m_editChar.GetWindowText(CHChar);//获取汉字 GetFirstLetter(CHChar, SpellChar);//调用汉字转拼音缩写程序 m_spell.SetWindowText(SpellChar);//设置拼音缩写到静态文本框}

你可能感兴趣的:(c)