C++中的半形、全形字元轉換
全形字元佔用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;
}