另外,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。可以凭这一点来一个个检测是否是中文和全角字符。实际上,全角字符的第一个字节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
,(如\'阿\'为:176 162),可以在检测到中文时不进行转换。
给你个全角字符转换到半角字符的例子:
----------------------------------
# include <iostream>
using namespace std;
string Convert(const char*);
int main()
{
const string strTmp="中国人,。";
cout<<Convert(strTmp.c_str())<<endl;
return 0;
}
string Convert(const char *cCharTmp)
{
int nLength=strlen(cCharTmp);
char *cTmp=new char[nLength+1];
strcpy(cTmp,cCharTmp);
string str="\0";
unsigned char
c1,c2;
int i;
for (i=0; i<nLength; i++)
{
c1=cTmp[i];
c2=cTmp[i+1];
if (c1==163)//判断是否为全角字符
{
str=str+(char)(c2-128);
i++;
continue;
}
if (c1>163)//判断是否为文字
{
str=str+(char)c1;
str=str+(char)c2;
i++;
continue;
}
if ((c1==161) && (c2==161))//全角空格是个特例,另加处理
{
str=str+"\0";
i++;
continue;
}
str=str+ (char)c1;
}
delete cTmp;
cTmp=NULL;
return str;
}
——————————————————————————————
帖子居然被截断了,下半部显示不出来了,我重发一下。
[
本帖最后由 303770957 于 2013-9-26 10:48 编辑 ]