再请教,取得拼音首字母
ccrun(老妖)贴过的代码如下,使用后基本都对,但我遇到了一个问题,汉字串中包含 " "字,取得的拼音首字母就出现了问题,也用过其他一些代码,遇到这个字也出现了问题,现请各位高手帮忙,谢谢....
贴个老代码:
String __fastcall FirstLetterFromHZ(String strKey)
{
unsigned int uiChineseChar = 0;
unsigned char ucChar[3] = " ";
String strResult;
memcpy(ucChar, strKey.c_str(),2);
uiChineseChar = (ucChar[0] < < 8) + ucChar[1];
if((uiChineseChar > = 0xB0A1) && (uiChineseChar <= 0xB0C4)) strResult = "A ";
if((uiChineseChar > = 0xB0C5) && (uiChineseChar <= 0xB2C0)) strResult = "B ";
if((uiChineseChar > = 0xB2C1) && (uiChineseChar <= 0xB4ED)) strResult = "C ";
if((uiChineseChar > = 0xB4EE) && (uiChineseChar <= 0xB6E9)) strResult = "D ";
if((uiChineseChar > = 0xB6EA) && (uiChineseChar <= 0xB7A1)) strResult = "E ";
if((uiChineseChar > = 0xB7A2) && (uiChineseChar <= 0xB8C0)) strResult = "F ";
if((uiChineseChar > = 0xB8C1) && (uiChineseChar <= 0xB9FD)) strResult = "G ";
if((uiChineseChar > = 0xB9FE) && (uiChineseChar <= 0xBBF6)) strResult = "H ";
if((uiChineseChar > = 0xBBF7) && (uiChineseChar <= 0xBFA5)) strResult = "J ";
if((uiChineseChar > = 0xBFA6) && (uiChineseChar <= 0xC0AB)) strResult = "K ";
if((uiChineseChar > = 0xC0AC) && (uiChineseChar <= 0xC2E7)) strResult = "L ";
if((uiChineseChar > = 0xC2E8) && (uiChineseChar <= 0xC4C2)) strResult = "M ";
if((uiChineseChar > = 0xC4C3) && (uiChineseChar <= 0xC5B5)) strResult = "N ";
if((uiChineseChar > = 0xC5B6) && (uiChineseChar <= 0xC5BD)) strResult = "O ";
if((uiChineseChar > = 0xC5BE) && (uiChineseChar <= 0xC6D9)) strResult = "P ";
if((uiChineseChar > = 0xC6DA) && (uiChineseChar <= 0xC8BA)) strResult = "Q ";
if((uiChineseChar > = 0xC8BB) && (uiChineseChar <= 0xC8F5)) strResult = "R ";
if((uiChineseChar > = 0xC8F6) && (uiChineseChar <= 0xCBF9)) strResult = "S ";
if((uiChineseChar > = 0xCBFA) && (uiChineseChar <= 0xCDD9)) strResult = "T ";
if((uiChineseChar > = 0xCDDA) && (uiChineseChar <= 0xCEF3)) strResult = "W ";
if((uiChineseChar > = 0xCEF4) && (uiChineseChar <= 0xD188)) strResult = "X ";
if((uiChineseChar > = 0xD1B9) && (uiChineseChar <= 0xD4D0)) strResult = "Y ";
if((uiChineseChar > = 0xD4D1) && (uiChineseChar <= 0xD7F9)) strResult = "Z ";
return strResult;
}
我的程序中和前面配套的程序段是
AnsiString __fastcall GetPYString(AnsiString InputHZString)
{
AnsiString TempString, ReturnString;
AnsiString Str =InputHZString.Trim();
for (int i=1; i <=Str.Length(); i++)
{
if (isprint(Str[i]))
{
ReturnString = ReturnString + Str[i];
}
else
{
TempString += Str[i];
if (TempString.Length() == 2)
{
ReturnString = ReturnString + GetPYFirstChar(TempString);
TempString = " ";
}
}
}
return ReturnString;
}
bool __fastcall In(int LowPosition, int HighPosition,int Value)
{
return ((Value <=HighPosition)&&(Value> =LowPosition));
}
[解决办法]
这个“”字的编码是 0x954E 根本就在你的表之外
那张表只能对付 GB2312 内的汉字,表也需要升级那