汉字转拼音缩写的BCB代码,该怎么处理
汉字转拼音缩写的BCB代码
这段代码是我从VC转换过来的,但是有问题,希望各位帮我看看修正一下:
代码如下:
void __fastcall TForm1::Button2Click(TObject *Sender)
{//转换
String CHChar,SpellChar;
CHChar = Edit1->Text;//获取汉字
GetFirstLetter(CHChar, SpellChar);//调用汉字转拼音缩写程序
Edit2->Text = SpellChar;//设置拼音缩写到文本框
}
//---------------------------------------
//通过汉字获得汉字拼音首字母串
void TForm1::GetFirstLetter(String strName, String& strFirstLetter)
{
//存放一个汉字高低位字节
TBYTE ucHigh, ucLow;
//存放汉字区位码
int nCode;
//存放汉字拼音首字母
String strRet;
//复位首字母
// strFirstLetter.IsEmpty();
//单个字节遍历
char *p=strName.c_str();
for (int i=0; i<strName.Length(); i++)
{
//判断是否是组成汉字的字节
if ( (TBYTE)*p < 0x80 )
{
p++;
continue;
}
//获取汉字高位字节
ucHigh = (TBYTE)*p;
//获取汉字低位字节
ucLow = (TBYTE)*p++;
//汉字的内码是从0xa1开始编码
if ( ucHigh < 0xa1 || ucLow < 0xa1)
{
p++;
continue;
}
else
{
//计算汉字区位码
nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;
//通过汉字区位码获得汉字拼音首字母
FirstLetter(nCode, strRet);
//将首字母拼接成串
strFirstLetter += strRet;
p++;
}
}
}
//---------------------------------------
void TForm1::FirstLetter(int nCode, String& strLetter)
{
if(nCode >= 1601 && nCode < 1637) strLetter = "a";
if(nCode >= 1637 && nCode < 1833) strLetter = "b";
这段代码是我从VC转换过来的,但是有问题,希望各位帮我看看修正一下:
代码如下:
void __fastcall TForm1::Button2Click(TObject *Sender)
{//转换
String CHChar,SpellChar;
CHChar = Edit1->Text;//获取汉字
GetFirstLetter(CHChar, SpellChar);//调用汉字转拼音缩写程序
Edit2->Text = SpellChar;//设置拼音缩写到文本框
}
//---------------------------------------
//通过汉字获得汉字拼音首字母串
void TForm1::GetFirstLetter(String strName, String& strFirstLetter)
{
//存放一个汉字高低位字节
TBYTE ucHigh, ucLow;
//存放汉字区位码
int nCode;
//存放汉字拼音首字母
String strRet;
//复位首字母
// strFirstLetter.IsEmpty();
//单个字节遍历
char *p=strName.c_str();
for (int i=0; i<strName.Length(); i++)
{
//判断是否是组成汉字的字节
if ( (TBYTE)*p < 0x80 )
{
p++;
continue;
}
//获取汉字高位字节
ucHigh = (TBYTE)*p;
//获取汉字低位字节
ucLow = (TBYTE)*p++;
//汉字的内码是从0xa1开始编码
if ( ucHigh < 0xa1 || ucLow < 0xa1)
{
p++;
continue;
}
else
{
//计算汉字区位码
nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;
//通过汉字区位码获得汉字拼音首字母
FirstLetter(nCode, strRet);
//将首字母拼接成串
strFirstLetter += strRet;
p++;
}
}
}
//---------------------------------------
void TForm1::FirstLetter(int nCode, String& strLetter)
{
if(nCode >= 1601 && nCode < 1637) strLetter = "a";
if(nCode >= 1637 && nCode < 1833) strLetter = "b";