全角字符占用2个字符位置,半角字符(Half-width characters)占用1个字符位置。他们在应用上的区别主要表现在输入阿拉伯数目字、英文字母、标点符号、特殊符号,这些只需要占1个字符位的一般用半角输入。如果用全角输入的话,每两个字符之间就会产生一个空格。
半角转全角
std::string ToFull(std::string str)
{
std::string result = "";
unsigned char tmp; unsigned char tmp1;
for (unsigned int i = 0; i < str.length(); i++)
{
tmp = str[i];
tmp1 = str[i + 1];
//cout << "uchar:" << (int) tmp << endl;
if (tmp>32 && tmp<128)
{//是半角字符
result += 163;//第一个字节设置为163
result += (unsigned char)str[i]+128;//第二个字节+128;
}
else if (tmp >= 163)
{//是全角字符
result += str.substr(i, 2);
i++;
continue;
}
else if (tmp == 32)
{//处理半角空格
result += 161;
result += 161;
}
else
{
result += str.substr(i, 2);
i++;
}
}
return result;
}
全角转半角
string ToHalf(string str) {
string result = "";
unsigned char tmp; unsigned char tmp1;
for (unsigned int i = 0; i < str.length(); i++) {
tmp = str[i];
tmp1 = str[i + 1];
cout << "uchar:" << (int) tmp << endl;
if (tmp == 163) {///第一个字节是163,标志着是全角字符
result += (unsigned char) str[i + 1] - 128;
i++;
continue;
} else if (tmp > 163) {//汉字
result += str.substr(i, 2);
i++;
continue;
} else if (tmp == 161 && tmp1 == 161) {///处理全角空格
result += "";
i++;
} else {
result += str.substr(i, 1); } } return result;
}